@treeseed/sdk 0.10.12 → 0.10.14

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.
@@ -1,4 +1,4 @@
1
- import { index, integer, pgTable, primaryKey, real, serial, text, uniqueIndex } from "drizzle-orm/pg-core";
1
+ import { bigint, index, integer, pgTable, primaryKey, real, serial, text, uniqueIndex } from "drizzle-orm/pg-core";
2
2
  const subscribers = pgTable("subscribers", {
3
3
  email: text("email").primaryKey(),
4
4
  createdAt: text("created_at").notNull()
@@ -130,6 +130,21 @@ const userIdentities = pgTable("user_identities", {
130
130
  }, (table) => [
131
131
  uniqueIndex("idx_user_identities_provider_subject").on(table.provider, table.providerSubject)
132
132
  ]);
133
+ const userEmailAddresses = pgTable("user_email_addresses", {
134
+ id: text("id").primaryKey(),
135
+ userId: text("user_id").notNull(),
136
+ email: text("email").notNull(),
137
+ normalizedEmail: text("normalized_email").notNull().unique(),
138
+ status: text("status").notNull().default("pending"),
139
+ isPrimary: integer("is_primary").notNull().default(0),
140
+ verificationRequestedAt: text("verification_requested_at"),
141
+ verifiedAt: text("verified_at"),
142
+ createdAt: text("created_at").notNull(),
143
+ updatedAt: text("updated_at").notNull()
144
+ }, (table) => [
145
+ index("idx_user_email_addresses_user").on(table.userId, table.status, table.isPrimary),
146
+ uniqueIndex("idx_user_email_addresses_normalized").on(table.normalizedEmail)
147
+ ]);
133
148
  const roles = pgTable("roles", {
134
149
  id: text("id").primaryKey(),
135
150
  keyColumn: text("key").notNull().unique(),
@@ -511,22 +526,59 @@ const projectInfrastructureResources = pgTable("project_infrastructure_resources
511
526
  ]);
512
527
  const projectDeployments = pgTable("project_deployments", {
513
528
  id: text("id").primaryKey(),
529
+ teamId: text("team_id").notNull(),
514
530
  projectId: text("project_id").notNull(),
515
531
  environment: text("environment").notNull(),
516
532
  deploymentKind: text("deployment_kind").notNull(),
533
+ action: text("action").notNull().default("deploy_web"),
517
534
  status: text("status").notNull(),
535
+ platformOperationId: text("platform_operation_id"),
536
+ retryOfDeploymentId: text("retry_of_deployment_id"),
537
+ resumedFromDeploymentId: text("resumed_from_deployment_id"),
538
+ idempotencyKey: text("idempotency_key"),
539
+ requestedByUserId: text("requested_by_user_id"),
518
540
  sourceRef: text("source_ref"),
519
541
  releaseTag: text("release_tag"),
520
542
  commitSha: text("commit_sha"),
521
543
  triggeredByType: text("triggered_by_type"),
522
544
  triggeredById: text("triggered_by_id"),
545
+ repositoryJson: text("repository_json").notNull().default("{}"),
546
+ externalWorkflowJson: text("external_workflow_json").notNull().default("{}"),
547
+ targetJson: text("target_json").notNull().default("{}"),
548
+ monitorJson: text("monitor_json").notNull().default("{}"),
549
+ summary: text("summary"),
550
+ errorJson: text("error_json").notNull().default("{}"),
523
551
  metadataJson: text("metadata_json"),
524
552
  startedAt: text("started_at"),
525
553
  finishedAt: text("finished_at"),
526
554
  createdAt: text("created_at").notNull(),
527
- updatedAt: text("updated_at").notNull()
555
+ updatedAt: text("updated_at").notNull(),
556
+ completedAt: text("completed_at")
557
+ }, (table) => [
558
+ index("idx_project_deployments_project_created").on(table.projectId, table.createdAt),
559
+ index("idx_project_deployments_project_environment").on(table.projectId, table.environment, table.createdAt),
560
+ index("idx_project_deployments_project_status").on(table.projectId, table.status, table.updatedAt),
561
+ index("idx_project_deployments_operation").on(table.platformOperationId),
562
+ index("idx_project_deployments_team_created").on(table.teamId, table.createdAt),
563
+ uniqueIndex("idx_project_deployments_idempotency").on(table.projectId, table.idempotencyKey)
564
+ ]);
565
+ const projectDeploymentEvents = pgTable("project_deployment_events", {
566
+ id: text("id").primaryKey(),
567
+ deploymentId: text("deployment_id").notNull(),
568
+ projectId: text("project_id").notNull(),
569
+ teamId: text("team_id").notNull(),
570
+ operationId: text("operation_id"),
571
+ kind: text("kind").notNull(),
572
+ message: text("message").notNull(),
573
+ status: text("status"),
574
+ severity: text("severity").notNull().default("info"),
575
+ sequence: integer("sequence").notNull(),
576
+ payloadJson: text("payload_json").notNull().default("{}"),
577
+ createdAt: text("created_at").notNull()
528
578
  }, (table) => [
529
- index("idx_project_deployments_project_environment").on(table.projectId, table.environment, table.createdAt)
579
+ index("idx_project_deployment_events_deployment_sequence").on(table.deploymentId, table.sequence),
580
+ index("idx_project_deployment_events_project_created").on(table.projectId, table.createdAt),
581
+ index("idx_project_deployment_events_operation").on(table.operationId)
530
582
  ]);
531
583
  const agentPools = pgTable("agent_pools", {
532
584
  id: text("id").primaryKey(),
@@ -702,8 +754,8 @@ const betterAuthUser = pgTable("better_auth_user", {
702
754
  email: text("email").notNull().unique(),
703
755
  emailVerified: integer("emailVerified").notNull().default(0),
704
756
  image: text("image"),
705
- createdAt: integer("createdAt").notNull(),
706
- updatedAt: integer("updatedAt").notNull(),
757
+ createdAt: bigint("createdAt", { mode: "number" }).notNull(),
758
+ updatedAt: bigint("updatedAt", { mode: "number" }).notNull(),
707
759
  username: text("username"),
708
760
  firstName: text("firstName"),
709
761
  lastName: text("lastName")
@@ -712,10 +764,10 @@ const betterAuthUser = pgTable("better_auth_user", {
712
764
  ]);
713
765
  const betterAuthSession = pgTable("better_auth_session", {
714
766
  id: text("id").primaryKey(),
715
- expiresAt: integer("expiresAt").notNull(),
767
+ expiresAt: bigint("expiresAt", { mode: "number" }).notNull(),
716
768
  token: text("token").notNull().unique(),
717
- createdAt: integer("createdAt").notNull(),
718
- updatedAt: integer("updatedAt").notNull(),
769
+ createdAt: bigint("createdAt", { mode: "number" }).notNull(),
770
+ updatedAt: bigint("updatedAt", { mode: "number" }).notNull(),
719
771
  ipAddress: text("ipAddress"),
720
772
  userAgent: text("userAgent"),
721
773
  userId: text("userId").notNull()
@@ -731,12 +783,12 @@ const betterAuthAccount = pgTable("better_auth_account", {
731
783
  accessToken: text("accessToken"),
732
784
  refreshToken: text("refreshToken"),
733
785
  idToken: text("idToken"),
734
- accessTokenExpiresAt: integer("accessTokenExpiresAt"),
735
- refreshTokenExpiresAt: integer("refreshTokenExpiresAt"),
786
+ accessTokenExpiresAt: bigint("accessTokenExpiresAt", { mode: "number" }),
787
+ refreshTokenExpiresAt: bigint("refreshTokenExpiresAt", { mode: "number" }),
736
788
  scope: text("scope"),
737
789
  password: text("password"),
738
- createdAt: integer("createdAt").notNull(),
739
- updatedAt: integer("updatedAt").notNull()
790
+ createdAt: bigint("createdAt", { mode: "number" }).notNull(),
791
+ updatedAt: bigint("updatedAt", { mode: "number" }).notNull()
740
792
  }, (table) => [
741
793
  index("idx_better_auth_account_userId").on(table.userId),
742
794
  uniqueIndex("idx_better_auth_account_provider_account").on(table.providerId, table.accountId)
@@ -745,9 +797,9 @@ const betterAuthVerification = pgTable("better_auth_verification", {
745
797
  id: text("id").primaryKey(),
746
798
  identifier: text("identifier").notNull(),
747
799
  value: text("value").notNull(),
748
- expiresAt: integer("expiresAt").notNull(),
749
- createdAt: integer("createdAt").notNull(),
750
- updatedAt: integer("updatedAt").notNull()
800
+ expiresAt: bigint("expiresAt", { mode: "number" }).notNull(),
801
+ createdAt: bigint("createdAt", { mode: "number" }).notNull(),
802
+ updatedAt: bigint("updatedAt", { mode: "number" }).notNull()
751
803
  }, (table) => [
752
804
  index("idx_better_auth_verification_identifier").on(table.identifier)
753
805
  ]);
@@ -1623,6 +1675,7 @@ const treeseedMarketSchema = {
1623
1675
  reports,
1624
1676
  users,
1625
1677
  userIdentities,
1678
+ userEmailAddresses,
1626
1679
  roles,
1627
1680
  permissions,
1628
1681
  rolePermissions,
@@ -1652,6 +1705,7 @@ const treeseedMarketSchema = {
1652
1705
  projectEnvironments,
1653
1706
  projectInfrastructureResources,
1654
1707
  projectDeployments,
1708
+ projectDeploymentEvents,
1655
1709
  agentPools,
1656
1710
  agentPoolRegistrations,
1657
1711
  agentPoolScaleDecisions,
@@ -1770,6 +1824,7 @@ export {
1770
1824
  prioritySnapshots,
1771
1825
  projectCapabilityGrants,
1772
1826
  projectConnections,
1827
+ projectDeploymentEvents,
1773
1828
  projectDeployments,
1774
1829
  projectEnvironments,
1775
1830
  projectHosting,
@@ -1809,6 +1864,7 @@ export {
1809
1864
  teamWebHosts,
1810
1865
  teams,
1811
1866
  treeseedMarketSchema,
1867
+ userEmailAddresses,
1812
1868
  userIdentities,
1813
1869
  userPreferences,
1814
1870
  userRoleBindings,
package/dist/index.d.ts CHANGED
@@ -7,6 +7,8 @@ export * from './seeds/index.ts';
7
7
  export { CAPACITY_PROVIDER_ENDPOINTS, CAPACITY_PROVIDER_DEPLOYMENT_SERVICE_ROLES, CAPACITY_PROVIDER_ENV_KEYS, CAPACITY_PROVIDER_SCOPES, CapacityProviderApiError, MarketProviderClient, assertCapacityProviderOkEnvelope, assertCapacityProviderPortfolioManifest, assertCapacityProviderRegistrationResponse, buildCapacityProviderAuthHeaders, deployCapacityProviderToManagedMarketHost, deployCapacityProviderToRailway, isCapacityProviderSecretEnvKey, redactCapacityProviderEnv, redactCapacityProviderSecret, renderCapacityProviderSelfHostInstructions, persistCapacityProviderConnectionToTreeseedConfig, resolveCapacityProviderEnvironment, resolveCapacityProviderLaunchEnvironment, } from './capacity-provider.ts';
8
8
  export { PLATFORM_OPERATION_ENDPOINTS, PLATFORM_OPERATION_NAMESPACES, PLATFORM_OPERATION_SCOPES, PLATFORM_OPERATION_STATUSES, PLATFORM_OPERATION_TARGETS, PlatformOperationApiError, PlatformRunnerClient, assertPlatformOperation, assertPlatformOperationEvent, assertPlatformOperationOkEnvelope, buildPlatformRunnerAuthHeaders, createPlatformOperationExecutorRegistry, derivePlatformOperationNavigation, isPlatformOperationSuccessful, isPlatformOperationTerminal, pollPlatformOperation, runPlatformOperationOnce, type PlatformOperation, type PlatformOperationEvent, type PlatformOperationNavigationResult, type PlatformOperationPollOptions, type PlatformOperationPollResult, } from './platform-operations.ts';
9
9
  export { PLATFORM_CONTENT_COLLECTIONS, PLATFORM_WORK_CONTENT_COLLECTIONS, createPlatformRepositoryClaim, derivePlatformRepositoryKey, executePlatformRepositoryOperation, normalizePlatformContentInput, normalizePlatformRelationArray, platformContentRelationPolicy, resolvePlatformRepositoryWorkspacePath, slugifyPlatformContent, type PlatformContentCollection, type PlatformRepositoryClaim, type PlatformRepositoryClaimInput, type PlatformRepositoryDescriptor, type PlatformRepositoryOperationInput, type PlatformRepositoryOperationOptions, type PlatformRepositoryOperationResult, type PlatformRepositoryPathPolicy, type PlatformRepositoryVerificationCommand, type PlatformRepositoryVerificationResult, type NormalizedPlatformContentInput, } from './operations/repository-operations.ts';
10
+ export { cancelGitHubWorkflowRun, dispatchGitHubWorkflowRun, formatGitHubWorkflowFailure, getGitHubWorkflowFileStatus, getLatestGitHubWorkflowRun, waitForGitHubWorkflowRunCompletion, type GitHubWorkflowCancellationResult, type GitHubWorkflowDispatchResult, type GitHubWorkflowFailureSummary, type GitHubWorkflowFailureSummaryInput, type GitHubWorkflowFileStatus, type GitHubWorkflowProgressEvent, } from './operations/services/github-api.ts';
11
+ export { buildProjectWebMonitorResult, } from './operations/services/project-web-monitor.ts';
10
12
  export { DEFAULT_EXECUTION_PROFILE_ID, DEFAULT_EXECUTION_PROFILES, DEFAULT_TASK_ADMISSION_POLICY, buildTaskEstimateProfileFromActuals, computeWorkdayBudgetEnvelope, decideTaskAdmission, estimateAttentionForTask, estimateConfidenceFromProfile, estimateLearningPercentile, estimateLearningVariance, estimateForClassification, estimateProfileConfidenceScore, estimateUtilityForTask, isInterruptedUsageActual, normalizeHybridExecutionPlan, mutationRequiresRepositoryClaim, normalizePlanningPolicy, normalizePredictiveReservePolicy, normalizeTaskPlanProposal, normalizeExecutionProfile, normalizeAttentionPolicy, normalizeTaskAdmissionPolicy, normalizeUtilityPolicy, predictReserveForCapacityPlan, progressivelyAdmitPlanProposal, rankPlannedTaskNodes, reservationHasCapacity, reserveCreditsForEstimate, routeAndReserveCapacity, scoreCapacityLane, selectBestCapacityLane, selectTaskEstimateProfile, ACTUAL_CREDIT_FORMULA_VERSION, buildCreditConversionProfileFromActuals, calculateActualCredits, deriveAvailableCredits, nativeUsageAmount, nativeUsageUnit, selectCreditConversionProfile, settleCapacityActuals, shouldInterruptForCapacity, synthesizePlanEstimate, createReservationReleaseEntry, summarizeCapacityPlan, summarizeProjectCapacityPlan, summarizeTeamCapacityPlan, validateTaskPlanProposal, } from './capacity.ts';
11
13
  export { executeKnowledgeHubProviderLaunch, validateKnowledgeHubProviderLaunchPrerequisites, } from './operations/services/hub-provider-launch.ts';
12
14
  export { createKnowledgeHubRepositories, defaultHubContentResolutionPolicy, executeKnowledgeHubLaunch, normalizeKnowledgeHubLaunchIntent, planKnowledgeHubLaunch, planKnowledgeHubRepositories, validateRepositoryHost, type HubContentResolutionPolicy, type KnowledgeHubLaunchIntent, type KnowledgeHubLaunchPhase, type KnowledgeHubLaunchPlan, type KnowledgeHubLaunchResult, type KnowledgeHubRepositoryPlan, type RepositoryHost, } from './operations/services/hub-launch.ts';
@@ -38,7 +40,7 @@ export { TreeseedWorkflowSdk } from './workflow.ts';
38
40
  export * from './db/index.ts';
39
41
  export { collectTreeseedReconcileStatus, createTreeseedReconcileRegistry, deriveTreeseedDesiredUnits, destroyTreeseedTargetUnits, observeTreeseedUnits, planTreeseedReconciliation, reconcileTreeseedTarget, } from './reconcile/index.ts';
40
42
  export { getTreeseedVerifyDriverStatus, runTreeseedVerifyDriver } from './verification.ts';
41
- export type { KnowledgeHubProviderLaunchPreflightReport, KnowledgeHubProviderLaunchFailurePhase, KnowledgeHubProviderLaunchInput, KnowledgeHubProviderLaunchResult, AgentMessageKind, AgentMessageRecord, AgentStatusRecord, DirectBoardItemSummary, InboxItem, ProjectJobStatus, LaunchProjectRequest, LaunchProjectResult, LinkedProjectRecordRef, ProjectConnectionStatus, ProjectOverviewSummary, ReleaseDetail, ReleaseState, ReleaseSummary, SharePackageState, SharePackageStatus, TeamCapability, TeamHomeSummary, TeamMemberSummary, WorkstreamDetail, WorkstreamEvent, WorkstreamState, WorkstreamSummary, SdkContentEntry, SdkDispatchCapability, SdkDispatchConfig, SdkDispatchCredentialSource, SdkDispatchExecutionClass, SdkDispatchNamespace, SdkDispatchPolicy, SdkDispatchRequest, SdkDispatchResult, SdkDispatchTarget, SdkCursorEntity, SdkFilterCondition, SdkFollowRequest, SdkGraphEdge, SdkGraphEdgeType, SdkGraphDslRelation, SdkGraphDslParseResult, SdkGraphModelConfig, SdkGraphNode, SdkGraphNodeType, SdkGraphPathExplanation, SdkGraphQueryStage, SdkGraphQueryView, SdkGraphQueryOptions, SdkGraphQueryRequest, SdkGraphQueryResult, SdkGraphRankingBuildInput, SdkGraphRankingDiagnostics, SdkGraphRankingIndex, SdkGraphRankingNodeResult, SdkGraphRankingProvider, SdkGraphRankingQueryRequest, SdkGraphRankingQueryResult, SdkGraphRankingSearchRequest, SdkGraphRefreshPayload, SdkGraphRefreshRequest, SdkGraphSearchOptions, SdkGraphSearchResult, SdkGraphSeed, SdkGraphSeedResolution, SdkGraphTraversalResult, SdkGraphWhereFilter, SdkContextPack, SdkContextPackRequest, SdkGetRequest, SdkJsonEnvelope, SdkLeaseEntity, SdkManagerContextPayload, SdkMessageEntity, SdkModelFieldBinding, SdkModelDefinition, SdkModelRegistry, SdkModelName, SdkMutationRequest, SdkOperation, SdkPickRequest, SdkPickResult, SdkQueueMessageEnvelope, SdkRunEntity, SdkSearchRequest, SdkTaskEntity, SdkTaskEventEntity, SdkTaskOutputEntity, SdkWorkDayEntity, SdkGraphRunEntity, SdkReportEntity, SdkSubscriptionEntity, SdkTemplateCatalogEntry, SdkTemplateCatalogPublisher, SdkTemplateCatalogResponse, SdkTemplateCatalogSource, SdkUpdateRequest, ProjectCapabilityGrant, ProjectConnection, ProjectConnectionMode, ProjectDeployment, ProjectDeploymentKind, ProjectDeploymentStatus, ProjectEnvironment, ProjectExecutionOwner, ProjectHosting, ProjectInfrastructureResource, ProjectInfrastructureResourceKind, ProjectInfrastructureResourceProvider, ProjectRunnerRegistrationState, RemoteJob, RemoteJobEvent, RemoteJobStatus, AgentPool, AgentPoolAutoscalePolicy, AgentPoolRegistration, AgentPoolScaleDecision, AgentPoolStatus, CatalogArtifactVersion, CatalogItem, CatalogItemFilters, CatalogItemOfferMode, ProjectEnvironmentName, ProjectWorkdaySummary, TreeseedHostingKind, TreeseedHostingRegistration, PriorityOverride, WorkdayWindow, WorkdaySchedule, WorkdayRequest, WorkdayManagerLease, WorkerRunner, WorkerRunnerState, RepositoryClaim, TaskCreditWeight, TaskCreditBudget, WorkdayPolicy, PrioritySnapshotItem, PrioritySnapshot, TaskCreditLedgerEntry, ApprovalRequest, DecideApprovalRequestRequest, ListApprovalRequestsRequest, CapacityBusinessModel, CapacityGrant, CapacityGrantScope, CapacityLedgerEntry, CapacityLaneUnit, CapacityPlan, CapacityProvider, CapacityProviderHost, CapacityProviderKind, CapacityProviderLane, CapacityReservation, CapacityRoutingDecision, CapacityTaskExecutionEnvelope, CanonicalTaskState, CreateApprovalRequestRequest, CreateCapacityReservationRequest, CreateCapacityRoutingDecisionRequest, CreateTaskEstimateRequest, CreateTaskUsageActualRequest, CreditConversionProfile, DerivedCapacityAvailability, DerivedCapacityInput, DerivedCapacitySummary, NativeUsageObservation, UpsertTeamInboxItemRequest, ExecutionProfile, HybridExecutionPhase, HybridExecutionPlan, PlannedTaskNode, PlanningAdmissionResult, PlanningPolicy, PredictiveReservePolicy, RecordCapacityUsageRequest, RepositoryWorkState, ReservePrediction, TaskAdmissionDecision, TaskAdmissionOutcome, TaskAdmissionPolicy, TaskClassification, TaskEstimate, TaskEstimateProfile, TaskCheckpointArtifact, TaskConcurrencyClass, TaskPlanProposal, TaskMutationScope, TaskRiskClass, TaskUsageActual, UtilityEstimate, UtilityPolicy, UpsertCapacityGrantRequest, UpsertCapacityProviderHostRequest, UpsertCapacityProviderLaneRequest, UpsertCapacityProviderRequest, ScaleDecision, RunnerScaleDecision, TeamStorageLocator, TeamWebHost, TeamWebHostOwnership, TeamWebHostProvider, EncryptedWebHostPayload, UpsertAgentPoolRequest, UpsertCatalogArtifactVersionRequest, UpsertCatalogItemRequest, UpsertProjectEnvironmentRequest, UpsertProjectHostingRequest, UpsertProjectInfrastructureResourceRequest, UpsertTeamStorageLocatorRequest, UpsertTeamWebHostRequest, CreateProjectDeploymentRequest, RecordAgentPoolRegistrationRequest, SdkAppendTaskEventRequest, SdkClaimTaskRequest, SdkCreateWorkdayRequest, SdkCloseWorkDayRequest, SdkCompleteTaskRequest, SdkCreateTaskRequest, SdkFailTaskRequest, SdkManagerContextPayload, SdkClaimWorkdayManagerLeaseRequest, SdkReleaseWorkdayManagerLeaseRequest, SdkRecordWorkerRunnerRequest, SdkRecordRepositoryClaimRequest, SdkRecordRunnerScaleDecisionRequest, SdkStartWorkDayRequest, SdkTaskEntity, SdkTaskEventEntity, SdkTaskOutputEntity, SdkTaskProgressRequest, SdkTaskSearchRequest, SdkUpdateWorkDayGraphRequest, SdkWorkDayEntity, WorkerPoolScaleResult, WorkerPoolScaler, } from './sdk-types.ts';
43
+ export type { KnowledgeHubProviderLaunchPreflightReport, KnowledgeHubProviderLaunchFailurePhase, KnowledgeHubProviderLaunchInput, KnowledgeHubProviderLaunchResult, AgentMessageKind, AgentMessageRecord, AgentStatusRecord, DirectBoardItemSummary, InboxItem, ProjectJobStatus, LaunchProjectRequest, LaunchProjectResult, LinkedProjectRecordRef, ProjectConnectionStatus, ProjectOverviewSummary, ReleaseDetail, ReleaseState, ReleaseSummary, SharePackageState, SharePackageStatus, TeamCapability, TeamHomeSummary, TeamMemberSummary, WorkstreamDetail, WorkstreamEvent, WorkstreamState, WorkstreamSummary, SdkContentEntry, SdkDispatchCapability, SdkDispatchConfig, SdkDispatchCredentialSource, SdkDispatchExecutionClass, SdkDispatchNamespace, SdkDispatchPolicy, SdkDispatchRequest, SdkDispatchResult, SdkDispatchTarget, SdkCursorEntity, SdkFilterCondition, SdkFollowRequest, SdkGraphEdge, SdkGraphEdgeType, SdkGraphDslRelation, SdkGraphDslParseResult, SdkGraphModelConfig, SdkGraphNode, SdkGraphNodeType, SdkGraphPathExplanation, SdkGraphQueryStage, SdkGraphQueryView, SdkGraphQueryOptions, SdkGraphQueryRequest, SdkGraphQueryResult, SdkGraphRankingBuildInput, SdkGraphRankingDiagnostics, SdkGraphRankingIndex, SdkGraphRankingNodeResult, SdkGraphRankingProvider, SdkGraphRankingQueryRequest, SdkGraphRankingQueryResult, SdkGraphRankingSearchRequest, SdkGraphRefreshPayload, SdkGraphRefreshRequest, SdkGraphSearchOptions, SdkGraphSearchResult, SdkGraphSeed, SdkGraphSeedResolution, SdkGraphTraversalResult, SdkGraphWhereFilter, SdkContextPack, SdkContextPackRequest, SdkGetRequest, SdkJsonEnvelope, SdkLeaseEntity, SdkManagerContextPayload, SdkMessageEntity, SdkModelFieldBinding, SdkModelDefinition, SdkModelRegistry, SdkModelName, SdkMutationRequest, SdkOperation, SdkPickRequest, SdkPickResult, SdkQueueMessageEnvelope, SdkRunEntity, SdkSearchRequest, SdkTaskEntity, SdkTaskEventEntity, SdkTaskOutputEntity, SdkWorkDayEntity, SdkGraphRunEntity, SdkReportEntity, SdkSubscriptionEntity, SdkTemplateCatalogEntry, SdkTemplateCatalogPublisher, SdkTemplateCatalogResponse, SdkTemplateCatalogSource, SdkUpdateRequest, ProjectCapabilityGrant, ProjectConnection, ProjectConnectionMode, ProjectDeployment, ProjectDeploymentActionAvailability, ProjectDeploymentEnvironment, ProjectDeploymentEvent, ProjectDeploymentKind, ProjectDeploymentReadiness, ProjectDeploymentStatus, ProjectEnvironment, ProjectExecutionOwner, ProjectWebDeploymentAction, ProjectWebMonitorCheck, ProjectWebMonitorCheckSource, ProjectWebMonitorCheckStatus, ProjectWebMonitorResult, ProjectWebMonitorStatus, ProjectHosting, ProjectInfrastructureResource, ProjectInfrastructureResourceKind, ProjectInfrastructureResourceProvider, ProjectRunnerRegistrationState, RemoteJob, RemoteJobEvent, RemoteJobStatus, AgentPool, AgentPoolAutoscalePolicy, AgentPoolRegistration, AgentPoolScaleDecision, AgentPoolStatus, CatalogArtifactVersion, CatalogItem, CatalogItemFilters, CatalogItemOfferMode, ProjectEnvironmentName, ProjectWorkdaySummary, TreeseedHostingKind, TreeseedHostingRegistration, PriorityOverride, WorkdayWindow, WorkdaySchedule, WorkdayRequest, WorkdayManagerLease, WorkerRunner, WorkerRunnerState, RepositoryClaim, TaskCreditWeight, TaskCreditBudget, WorkdayPolicy, PrioritySnapshotItem, PrioritySnapshot, TaskCreditLedgerEntry, ApprovalRequest, DecideApprovalRequestRequest, ListApprovalRequestsRequest, CapacityBusinessModel, CapacityGrant, CapacityGrantScope, CapacityLedgerEntry, CapacityLaneUnit, CapacityPlan, CapacityProvider, CapacityProviderHost, CapacityProviderKind, CapacityProviderLane, CapacityReservation, CapacityRoutingDecision, CapacityTaskExecutionEnvelope, CanonicalTaskState, CreateApprovalRequestRequest, CreateCapacityReservationRequest, CreateCapacityRoutingDecisionRequest, CreateTaskEstimateRequest, CreateTaskUsageActualRequest, CreditConversionProfile, DerivedCapacityAvailability, DerivedCapacityInput, DerivedCapacitySummary, NativeUsageObservation, UpsertTeamInboxItemRequest, ExecutionProfile, HybridExecutionPhase, HybridExecutionPlan, PlannedTaskNode, PlanningAdmissionResult, PlanningPolicy, PredictiveReservePolicy, RecordCapacityUsageRequest, RepositoryWorkState, ReservePrediction, TaskAdmissionDecision, TaskAdmissionOutcome, TaskAdmissionPolicy, TaskClassification, TaskEstimate, TaskEstimateProfile, TaskCheckpointArtifact, TaskConcurrencyClass, TaskPlanProposal, TaskMutationScope, TaskRiskClass, TaskUsageActual, UtilityEstimate, UtilityPolicy, UpsertCapacityGrantRequest, UpsertCapacityProviderHostRequest, UpsertCapacityProviderLaneRequest, UpsertCapacityProviderRequest, ScaleDecision, RunnerScaleDecision, TeamStorageLocator, TeamWebHost, TeamWebHostOwnership, TeamWebHostProvider, EncryptedWebHostPayload, UpsertAgentPoolRequest, UpsertCatalogArtifactVersionRequest, UpsertCatalogItemRequest, UpsertProjectEnvironmentRequest, UpsertProjectHostingRequest, UpsertProjectInfrastructureResourceRequest, UpsertTeamStorageLocatorRequest, UpsertTeamWebHostRequest, CreateProjectDeploymentRequest, CreateProjectWebDeploymentRequest, CreateProjectWebDeploymentResponse, RecordAgentPoolRegistrationRequest, SdkAppendTaskEventRequest, SdkClaimTaskRequest, SdkCreateWorkdayRequest, SdkCloseWorkDayRequest, SdkCompleteTaskRequest, SdkCreateTaskRequest, SdkFailTaskRequest, SdkManagerContextPayload, SdkClaimWorkdayManagerLeaseRequest, SdkReleaseWorkdayManagerLeaseRequest, SdkRecordWorkerRunnerRequest, SdkRecordRepositoryClaimRequest, SdkRecordRunnerScaleDecisionRequest, SdkStartWorkDayRequest, SdkTaskEntity, SdkTaskEventEntity, SdkTaskOutputEntity, SdkTaskProgressRequest, SdkTaskSearchRequest, SdkUpdateWorkDayGraphRequest, SdkWorkDayEntity, WorkerPoolScaleResult, WorkerPoolScaler, } from './sdk-types.ts';
42
44
  export type * from './project-workflow.ts';
43
45
  export type { ControlPlaneAgentPoolHeartbeat, ControlPlaneDeploymentReport, ControlPlaneEnvironmentReport, ControlPlaneReporter, ControlPlaneReporterKind, ControlPlaneResourceReport, ControlPlaneScaleDecisionReport, ControlPlaneWorkdaySummaryReport, } from './control-plane.ts';
44
46
  export type { ControlPlaneClientOptions } from './control-plane-client.ts';
package/dist/index.js CHANGED
@@ -56,6 +56,17 @@ import {
56
56
  resolvePlatformRepositoryWorkspacePath,
57
57
  slugifyPlatformContent
58
58
  } from "./operations/repository-operations.js";
59
+ import {
60
+ cancelGitHubWorkflowRun,
61
+ dispatchGitHubWorkflowRun,
62
+ formatGitHubWorkflowFailure,
63
+ getGitHubWorkflowFileStatus,
64
+ getLatestGitHubWorkflowRun,
65
+ waitForGitHubWorkflowRunCompletion
66
+ } from "./operations/services/github-api.js";
67
+ import {
68
+ buildProjectWebMonitorResult
69
+ } from "./operations/services/project-web-monitor.js";
59
70
  import {
60
71
  DEFAULT_EXECUTION_PROFILE_ID,
61
72
  DEFAULT_EXECUTION_PROFILES,
@@ -377,10 +388,12 @@ export {
377
388
  buildKnowledgePackMarketPackage,
378
389
  buildModelRegistry,
379
390
  buildPlatformRunnerAuthHeaders,
391
+ buildProjectWebMonitorResult,
380
392
  buildScopedModelRegistry,
381
393
  buildTaskEstimateProfileFromActuals,
382
394
  buildTemplateMarketPackage,
383
395
  calculateActualCredits,
396
+ cancelGitHubWorkflowRun,
384
397
  canonicalizeFrontmatter,
385
398
  clearMarketSession,
386
399
  collectTreeseedDependencyStatus,
@@ -414,6 +427,7 @@ export {
414
427
  derivePlatformRepositoryKey,
415
428
  deriveTreeseedDesiredUnits,
416
429
  destroyTreeseedTargetUnits,
430
+ dispatchGitHubWorkflowRun,
417
431
  ensureRailwayEnvironment,
418
432
  ensureRailwayProject,
419
433
  ensureRailwayService,
@@ -431,7 +445,10 @@ export {
431
445
  findDispatchCapability,
432
446
  findSdkOperation,
433
447
  findTreeseedOperation,
448
+ formatGitHubWorkflowFailure,
434
449
  formatTreeseedDependencyReport,
450
+ getGitHubWorkflowFileStatus,
451
+ getLatestGitHubWorkflowRun,
435
452
  getRailwayAuthProfile,
436
453
  getTenantContentRoot,
437
454
  getTreeseedVerifyDriverStatus,
@@ -559,5 +576,6 @@ export {
559
576
  validateTaskPlanProposal,
560
577
  verifyArtifactBytes,
561
578
  verifyEditorialPreviewToken,
579
+ waitForGitHubWorkflowRunCompletion,
562
580
  writeMarketRegistryState
563
581
  };
@@ -1,4 +1,5 @@
1
1
  import type { ApiPrincipal, DeviceCodePollRequest, DeviceCodePollResponse, DeviceCodeStartRequest, DeviceCodeStartResponse, TokenRefreshRequest, TokenRefreshResponse } from './remote.ts';
2
+ import type { CreateProjectWebDeploymentRequest, CreateProjectWebDeploymentResponse, ProjectDeployment, ProjectDeploymentActionAvailability, ProjectDeploymentEnvironment, ProjectDeploymentEvent, ProjectDeploymentReadiness, ProjectWebDeploymentAction } from './sdk-types.ts';
2
3
  export declare const DEFAULT_TREESEED_MARKET_BASE_URL = "https://api.treeseed.ai";
3
4
  export declare const TREESEED_CENTRAL_MARKET_API_BASE_URL_ENV = "TREESEED_CENTRAL_MARKET_API_BASE_URL";
4
5
  export declare const TREESEED_MARKET_API_BASE_URL_ENV = "TREESEED_MARKET_API_BASE_URL";
@@ -26,6 +27,18 @@ export interface MarketWebAuthSession {
26
27
  principal: ApiPrincipal;
27
28
  session?: Record<string, unknown> | null;
28
29
  }
30
+ export interface MarketUserEmailAddress {
31
+ id: string;
32
+ userId: string;
33
+ email: string;
34
+ status: string;
35
+ verified: boolean;
36
+ isPrimary: boolean;
37
+ verificationRequestedAt?: string | null;
38
+ verifiedAt?: string | null;
39
+ createdAt?: string | null;
40
+ updatedAt?: string | null;
41
+ }
29
42
  export interface MarketRegistryState {
30
43
  version: 1;
31
44
  activeMarketId: string;
@@ -82,6 +95,34 @@ export interface IntegratedMarketCatalogResult<T extends Record<string, unknown>
82
95
  error: string;
83
96
  }>;
84
97
  }
98
+ export interface MarketProjectDeploymentState {
99
+ ok: true;
100
+ project: Record<string, unknown>;
101
+ launch: Record<string, unknown> | null;
102
+ environments: unknown[];
103
+ repositories: unknown[];
104
+ hosts: unknown[];
105
+ runner: Record<string, unknown>;
106
+ latestDeployments: {
107
+ staging: ProjectDeployment | null;
108
+ prod: ProjectDeployment | null;
109
+ };
110
+ latestMonitors: {
111
+ staging: Record<string, unknown> | null;
112
+ prod: Record<string, unknown> | null;
113
+ };
114
+ activeOperations: ProjectDeployment[];
115
+ recentDeployments: ProjectDeployment[];
116
+ readiness: ProjectDeploymentReadiness;
117
+ actions: ProjectDeploymentActionAvailability[];
118
+ target: Record<string, unknown> | null;
119
+ }
120
+ export interface ProjectDeploymentListFilters {
121
+ environment?: ProjectDeploymentEnvironment | string | null;
122
+ action?: ProjectWebDeploymentAction | string | null;
123
+ status?: string | null;
124
+ limit?: number | string | null;
125
+ }
85
126
  export interface MarketClientOptions {
86
127
  profile: MarketProfile;
87
128
  accessToken?: string | null;
@@ -155,6 +196,12 @@ export declare class MarketClient {
155
196
  ok: true;
156
197
  payload: MarketWebAuthSession;
157
198
  }>;
199
+ confirmWebEmail(body: {
200
+ token: string;
201
+ }): Promise<{
202
+ ok: true;
203
+ payload: MarketWebAuthSession;
204
+ }>;
158
205
  checkWebUsername(username: string): Promise<{
159
206
  ok: true;
160
207
  payload: {
@@ -163,6 +210,38 @@ export declare class MarketClient {
163
210
  status: string;
164
211
  };
165
212
  }>;
213
+ webEmails(): Promise<{
214
+ ok: true;
215
+ payload: MarketUserEmailAddress[];
216
+ }>;
217
+ addWebEmail(body: {
218
+ email: string;
219
+ }): Promise<{
220
+ ok: true;
221
+ payload: {
222
+ emailAddress: MarketUserEmailAddress;
223
+ verificationSent: boolean;
224
+ confirmationToken?: string;
225
+ };
226
+ }>;
227
+ verifyWebEmail(emailId: string): Promise<{
228
+ ok: true;
229
+ payload: {
230
+ emailAddress: MarketUserEmailAddress;
231
+ verificationSent: boolean;
232
+ confirmationToken?: string;
233
+ };
234
+ }>;
235
+ setPrimaryWebEmail(emailId: string): Promise<{
236
+ ok: true;
237
+ payload: MarketWebAuthSession & {
238
+ emailAddress: MarketUserEmailAddress;
239
+ };
240
+ }>;
241
+ deleteWebEmail(emailId: string): Promise<{
242
+ ok: true;
243
+ payload: MarketUserEmailAddress[];
244
+ }>;
166
245
  webSessions(): Promise<{
167
246
  ok: true;
168
247
  payload: unknown[];
@@ -286,6 +365,34 @@ export declare class MarketClient {
286
365
  environments: ProjectEnvironmentAccess[];
287
366
  };
288
367
  }>;
368
+ projectDeploymentState(projectId: string): Promise<MarketProjectDeploymentState>;
369
+ projectDeployments(projectId: string, filters?: ProjectDeploymentListFilters): Promise<{
370
+ ok: true;
371
+ payload: ProjectDeployment[];
372
+ }>;
373
+ projectDeployment(projectId: string, deploymentId: string): Promise<{
374
+ ok: true;
375
+ payload: ProjectDeployment;
376
+ }>;
377
+ projectDeploymentEvents(projectId: string, deploymentId: string, options?: {
378
+ limit?: number | string | null;
379
+ }): Promise<{
380
+ ok: true;
381
+ payload: ProjectDeploymentEvent[];
382
+ }>;
383
+ createProjectWebDeployment(projectId: string, body: CreateProjectWebDeploymentRequest): Promise<CreateProjectWebDeploymentResponse>;
384
+ retryProjectDeployment(projectId: string, deploymentId: string, body?: Record<string, unknown>): Promise<{
385
+ ok: true;
386
+ originalDeployment: ProjectDeployment;
387
+ retryDeployment: ProjectDeployment;
388
+ operation: Record<string, unknown>;
389
+ }>;
390
+ resumeProjectDeployment(projectId: string, deploymentId: string, body?: Record<string, unknown>): Promise<Record<string, unknown>>;
391
+ cancelProjectDeployment(projectId: string, deploymentId: string, body?: Record<string, unknown>): Promise<{
392
+ ok: true;
393
+ deployment: ProjectDeployment;
394
+ cancellation: "completed" | "requested" | string;
395
+ }>;
289
396
  teamCapacity(teamId: string): Promise<{
290
397
  ok: true;
291
398
  payload: Record<string, unknown>;
@@ -272,7 +272,8 @@ class MarketClient {
272
272
  });
273
273
  const payload = await response.json().catch(() => ({}));
274
274
  if (!response.ok) {
275
- const error = typeof payload.error === "string" ? String(payload.error) : `Market request failed with ${response.status}.`;
275
+ const payloadError = payload.error;
276
+ const error = typeof payloadError === "string" ? String(payloadError) : payloadError && typeof payloadError === "object" && typeof payloadError.message === "string" ? String(payloadError.message) : `Market request failed with ${response.status}.`;
276
277
  throw new MarketApiError(error, response.status, payload);
277
278
  }
278
279
  return payload;
@@ -331,11 +332,45 @@ class MarketClient {
331
332
  body
332
333
  });
333
334
  }
335
+ confirmWebEmail(body) {
336
+ return this.request("/v1/auth/web/confirm-email", {
337
+ method: "POST",
338
+ body
339
+ });
340
+ }
334
341
  checkWebUsername(username) {
335
342
  return this.request(
336
343
  `/v1/auth/web/username/check?username=${encodeURIComponent(username)}`
337
344
  );
338
345
  }
346
+ webEmails() {
347
+ return this.request("/v1/auth/web/emails", { requireAuth: true });
348
+ }
349
+ addWebEmail(body) {
350
+ return this.request("/v1/auth/web/emails", {
351
+ method: "POST",
352
+ body,
353
+ requireAuth: true
354
+ });
355
+ }
356
+ verifyWebEmail(emailId) {
357
+ return this.request(
358
+ `/v1/auth/web/emails/${encodeURIComponent(emailId)}/verify`,
359
+ { method: "POST", requireAuth: true }
360
+ );
361
+ }
362
+ setPrimaryWebEmail(emailId) {
363
+ return this.request(
364
+ `/v1/auth/web/emails/${encodeURIComponent(emailId)}/primary`,
365
+ { method: "POST", requireAuth: true }
366
+ );
367
+ }
368
+ deleteWebEmail(emailId) {
369
+ return this.request(
370
+ `/v1/auth/web/emails/${encodeURIComponent(emailId)}`,
371
+ { method: "DELETE", requireAuth: true }
372
+ );
373
+ }
339
374
  webSessions() {
340
375
  return this.request("/v1/auth/web/sessions", { requireAuth: true });
341
376
  }
@@ -426,6 +461,61 @@ class MarketClient {
426
461
  { requireAuth: true }
427
462
  );
428
463
  }
464
+ projectDeploymentState(projectId) {
465
+ return this.request(
466
+ `/v1/projects/${encodeURIComponent(projectId)}/deployment-state`,
467
+ { requireAuth: true }
468
+ );
469
+ }
470
+ projectDeployments(projectId, filters = {}) {
471
+ const query = new URLSearchParams();
472
+ if (filters.environment) query.set("environment", String(filters.environment));
473
+ if (filters.action) query.set("action", String(filters.action));
474
+ if (filters.status) query.set("status", String(filters.status));
475
+ if (filters.limit) query.set("limit", String(filters.limit));
476
+ const suffix = query.size > 0 ? `?${query.toString()}` : "";
477
+ return this.request(
478
+ `/v1/projects/${encodeURIComponent(projectId)}/deployments${suffix}`,
479
+ { requireAuth: true }
480
+ );
481
+ }
482
+ projectDeployment(projectId, deploymentId) {
483
+ return this.request(
484
+ `/v1/projects/${encodeURIComponent(projectId)}/deployments/${encodeURIComponent(deploymentId)}`,
485
+ { requireAuth: true }
486
+ );
487
+ }
488
+ projectDeploymentEvents(projectId, deploymentId, options = {}) {
489
+ const query = options.limit ? `?limit=${encodeURIComponent(String(options.limit))}` : "";
490
+ return this.request(
491
+ `/v1/projects/${encodeURIComponent(projectId)}/deployments/${encodeURIComponent(deploymentId)}/events${query}`,
492
+ { requireAuth: true }
493
+ );
494
+ }
495
+ createProjectWebDeployment(projectId, body) {
496
+ return this.request(
497
+ `/v1/projects/${encodeURIComponent(projectId)}/deployments/web`,
498
+ { method: "POST", body, requireAuth: true }
499
+ );
500
+ }
501
+ retryProjectDeployment(projectId, deploymentId, body = {}) {
502
+ return this.request(
503
+ `/v1/projects/${encodeURIComponent(projectId)}/deployments/${encodeURIComponent(deploymentId)}/retry`,
504
+ { method: "POST", body, requireAuth: true }
505
+ );
506
+ }
507
+ resumeProjectDeployment(projectId, deploymentId, body = {}) {
508
+ return this.request(
509
+ `/v1/projects/${encodeURIComponent(projectId)}/deployments/${encodeURIComponent(deploymentId)}/resume`,
510
+ { method: "POST", body, requireAuth: true }
511
+ );
512
+ }
513
+ cancelProjectDeployment(projectId, deploymentId, body = {}) {
514
+ return this.request(
515
+ `/v1/projects/${encodeURIComponent(projectId)}/deployments/${encodeURIComponent(deploymentId)}/cancel`,
516
+ { method: "POST", body, requireAuth: true }
517
+ );
518
+ }
429
519
  teamCapacity(teamId) {
430
520
  return this.request(
431
521
  `/v1/teams/${encodeURIComponent(teamId)}/capacity`,
@@ -61,6 +61,14 @@ export declare function buildPublicVars(deployConfig: any): {
61
61
  TREESEED_RAILWAY_ENVIRONMENT_ID: string;
62
62
  TREESEED_RAILWAY_WORKER_SERVICE_ID: any;
63
63
  TREESEED_PUBLIC_TURNSTILE_SITE_KEY: string;
64
+ TREESEED_AUTH_EMAIL_FROM: string;
65
+ TREESEED_AUTH_EMAIL_REPLY_TO: string;
66
+ TREESEED_SMTP_HOST: string;
67
+ TREESEED_SMTP_PORT: string;
68
+ TREESEED_SMTP_USERNAME: string;
69
+ TREESEED_SMTP_FROM: string;
70
+ TREESEED_SMTP_REPLY_TO: string;
71
+ TREESEED_SMTP_SECURE: string;
64
72
  TREESEED_WEB_CACHE_SOURCE_BROWSER_TTL_SECONDS: string;
65
73
  TREESEED_WEB_CACHE_SOURCE_EDGE_TTL_SECONDS: string;
66
74
  TREESEED_WEB_CACHE_SOURCE_STALE_WHILE_REVALIDATE_SECONDS: string;
@@ -305,6 +305,14 @@ function buildPublicVars(deployConfig) {
305
305
  TREESEED_RAILWAY_ENVIRONMENT_ID: envOrNull("TREESEED_RAILWAY_ENVIRONMENT_ID") ?? "",
306
306
  TREESEED_RAILWAY_WORKER_SERVICE_ID: envOrNull("TREESEED_RAILWAY_WORKER_SERVICE_ID") ?? workerRailway.serviceId ?? "",
307
307
  TREESEED_PUBLIC_TURNSTILE_SITE_KEY: envOrNull("TREESEED_PUBLIC_TURNSTILE_SITE_KEY") ?? "",
308
+ TREESEED_AUTH_EMAIL_FROM: envOrNull("TREESEED_AUTH_EMAIL_FROM") ?? "",
309
+ TREESEED_AUTH_EMAIL_REPLY_TO: envOrNull("TREESEED_AUTH_EMAIL_REPLY_TO") ?? "",
310
+ TREESEED_SMTP_HOST: envOrNull("TREESEED_SMTP_HOST") ?? "",
311
+ TREESEED_SMTP_PORT: envOrNull("TREESEED_SMTP_PORT") ?? "",
312
+ TREESEED_SMTP_USERNAME: envOrNull("TREESEED_SMTP_USERNAME") ?? "",
313
+ TREESEED_SMTP_FROM: envOrNull("TREESEED_SMTP_FROM") ?? "",
314
+ TREESEED_SMTP_REPLY_TO: envOrNull("TREESEED_SMTP_REPLY_TO") ?? "",
315
+ TREESEED_SMTP_SECURE: envOrNull("TREESEED_SMTP_SECURE") ?? "",
308
316
  TREESEED_WEB_CACHE_SOURCE_BROWSER_TTL_SECONDS: String(webCachePolicy.sourcePages.browserTtlSeconds),
309
317
  TREESEED_WEB_CACHE_SOURCE_EDGE_TTL_SECONDS: String(webCachePolicy.sourcePages.edgeTtlSeconds),
310
318
  TREESEED_WEB_CACHE_SOURCE_STALE_WHILE_REVALIDATE_SECONDS: String(webCachePolicy.sourcePages.staleWhileRevalidateSeconds),
@@ -340,7 +348,10 @@ const LOCAL_RUNTIME_AUTH_ENV_KEYS = [
340
348
  "TREESEED_API_DEVICE_CODE_TTL",
341
349
  "TREESEED_API_DEVICE_ACCESS_TOKEN_TTL",
342
350
  "TREESEED_API_DEVICE_POLL_INTERVAL",
351
+ "TREESEED_API_WEB_SERVICE_ID",
352
+ "TREESEED_API_WEB_SERVICE_SECRET",
343
353
  "TREESEED_API_WEB_EXCHANGE_TTL",
354
+ "TREESEED_PLATFORM_RUNNER_SECRET",
344
355
  "TREESEED_AUTH_GITHUB_CLIENT_ID",
345
356
  "TREESEED_AUTH_GITHUB_CLIENT_SECRET",
346
357
  "TREESEED_AUTH_GOOGLE_CLIENT_ID",
@@ -384,7 +395,7 @@ function buildSecretMap(deployConfig, state) {
384
395
  TREESEED_FORM_TOKEN_SECRET: envOrNull("TREESEED_FORM_TOKEN_SECRET") ?? generatedSecret,
385
396
  TREESEED_EDITORIAL_PREVIEW_SECRET: envOrNull("TREESEED_EDITORIAL_PREVIEW_SECRET") ?? previewSecret,
386
397
  TREESEED_TURNSTILE_SECRET_KEY: envOrNull("TREESEED_TURNSTILE_SECRET_KEY"),
387
- TREESEED_SMTP_PASSWORD: deployConfig.smtp?.enabled ? envOrNull("TREESEED_SMTP_PASSWORD") : null
398
+ TREESEED_SMTP_PASSWORD: envOrNull("TREESEED_SMTP_PASSWORD")
388
399
  };
389
400
  }
390
401
  function defaultStateFromConfig(deployConfig, target) {