@treeseed/sdk 0.10.23 → 0.10.25
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/index.d.ts +12 -2
- package/dist/index.js +42 -1
- package/dist/market-client.d.ts +23 -0
- package/dist/market-client.js +30 -0
- package/dist/operations/providers/default.js +103 -10
- package/dist/operations/repository-operations.d.ts +6 -1
- package/dist/operations/repository-operations.js +44 -0
- package/dist/operations/services/bootstrap-runner.d.ts +5 -1
- package/dist/operations/services/bootstrap-runner.js +34 -5
- package/dist/operations/services/config-runtime.d.ts +25 -9
- package/dist/operations/services/config-runtime.js +60 -12
- package/dist/operations/services/deploy.js +6 -1
- package/dist/operations/services/hub-launch.js +1 -0
- package/dist/operations/services/hub-provider-launch.d.ts +11 -1
- package/dist/operations/services/hub-provider-launch.js +81 -8
- package/dist/operations/services/project-host-operations.d.ts +153 -0
- package/dist/operations/services/project-host-operations.js +365 -0
- package/dist/operations/services/project-platform.d.ts +207 -177
- package/dist/operations/services/project-platform.js +96 -29
- package/dist/operations/services/railway-deploy.d.ts +33 -1
- package/dist/operations/services/railway-deploy.js +153 -44
- package/dist/operations/services/release-candidate.js +8 -2
- package/dist/operations/services/template-host-bindings.d.ts +68 -0
- package/dist/operations/services/template-host-bindings.js +400 -0
- package/dist/operations/services/template-registry.d.ts +22 -2
- package/dist/operations/services/template-registry.js +93 -6
- package/dist/operations/services/template-secret-sync.d.ts +97 -0
- package/dist/operations/services/template-secret-sync.js +292 -0
- package/dist/platform/contracts.d.ts +1 -0
- package/dist/platform/deploy-config.js +8 -1
- package/dist/platform/deploy-runtime.js +1 -0
- package/dist/platform/environment.d.ts +3 -0
- package/dist/project-workflow.d.ts +7 -1
- package/dist/reconcile/engine.d.ts +2 -0
- package/dist/reconcile/engine.js +58 -3
- package/dist/scripts/scaffold-site.js +3 -2
- package/dist/scripts/test-scaffold.js +2 -1
- package/dist/sdk-types.d.ts +87 -0
- package/dist/sdk-types.js +29 -0
- package/dist/template-catalog.js +3 -1
- package/dist/template-launch-requirements.d.ts +118 -0
- package/dist/template-launch-requirements.js +759 -0
- package/dist/template-launch-ui.d.ts +85 -0
- package/dist/template-launch-ui.js +189 -0
- package/dist/timing.d.ts +20 -0
- package/dist/timing.js +73 -0
- package/dist/treeseed/template-catalog/catalog.fixture.json +477 -0
- package/package.json +13 -1
- package/templates/github/deploy-web.workflow.yml +4 -0
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { AgentSdk, ScopedAgentSdk } from './sdk.ts';
|
|
2
2
|
export { ContentGraphRuntime } from './graph.ts';
|
|
3
|
-
export { projectConnectionModeFromHosting } from './sdk-types.ts';
|
|
3
|
+
export { TREESEED_DEFAULT_STARTER_TEMPLATE_ID, projectConnectionModeFromHosting } from './sdk-types.ts';
|
|
4
4
|
export { createControlPlaneReporter } from './control-plane.ts';
|
|
5
5
|
export { ControlPlaneClient } from './control-plane-client.ts';
|
|
6
6
|
export * from './seeds/index.ts';
|
|
@@ -32,6 +32,16 @@ export { resolveSdkRecordVersion } from './sdk-version.ts';
|
|
|
32
32
|
export { normalizeAliasedRecord, preprocessAliasedRecord, resolveAliasedField, } from './field-aliases.ts';
|
|
33
33
|
export { canonicalizeFrontmatter, normalizeFilterFields, normalizeMutationData, normalizeRecordToCanonicalShape, normalizeSortFields, readCanonicalFieldValue, resolveModelField, validateModelFieldAliases, } from './sdk-fields.ts';
|
|
34
34
|
export { RemoteTemplateCatalogClient, parseTemplateCatalogResponse } from './template-catalog.ts';
|
|
35
|
+
export { normalizeProjectLaunchHostBindings, normalizeTemplateLaunchRequirements, parseProjectLaunchHostBindingSpecs, resolveProjectLaunchHostBindings, validateTemplateLaunchRequirements, } from './template-launch-requirements.ts';
|
|
36
|
+
export type { ParseProjectLaunchHostBindingSpecsOptions, ParseProjectLaunchHostBindingSpecsResult, ProjectLaunchConfigWritePlanItem, ProjectLaunchHostInventoryRecord, ProjectLaunchLocalHostBindingSummary, ProjectLaunchResolvedHostBinding, ProjectLaunchSecretDeploymentPlanItem, ResolveProjectLaunchHostBindingsOptions, ResolveProjectLaunchHostBindingsResult, } from './template-launch-requirements.ts';
|
|
37
|
+
export { deriveProjectLaunchRequirementsViewModel, } from './template-launch-ui.ts';
|
|
38
|
+
export type { DeriveProjectLaunchRequirementsViewModelOptions, ProjectLaunchHostRequirementViewModel, ProjectLaunchRequirementHostChoice, ProjectLaunchRequirementsViewModel, ProjectLaunchResourceRequirementViewModel, ProjectLaunchSecretRequirementViewModel, } from './template-launch-ui.ts';
|
|
39
|
+
export { applyProjectLaunchHostBindingConfig, auditProjectLaunchHostBindingConfig, preserveProjectLaunchHostBindingConfigOverlay, } from './operations/services/template-host-bindings.ts';
|
|
40
|
+
export type { ApplyProjectLaunchHostBindingConfigOptions, ProjectLaunchHostBindingConfigAuditDiagnostic, ProjectLaunchHostBindingConfigAuditResult, ProjectLaunchHostBindingConfigApplyResult, ProjectLaunchHostBindingConfigWriteSummary, ProjectLaunchHostBindingEnvironmentWriteSummary, } from './operations/services/template-host-bindings.ts';
|
|
41
|
+
export { ProjectLaunchSecretSyncError, resolveProjectLaunchSecretValueOverlay, syncProjectLaunchHostBindingSecrets, } from './operations/services/template-secret-sync.ts';
|
|
42
|
+
export type { ProjectLaunchResolvedSecretValueItem, ProjectLaunchSecretSyncAdapters, ProjectLaunchSecretSyncProgressEvent, ProjectLaunchSecretSyncProvider, ProjectLaunchSecretSyncProviderStatus, ProjectLaunchSecretSyncProviderSummary, ProjectLaunchSecretSyncResult, ProjectLaunchSecretSyncStatus, ProjectLaunchSecretSyncSummaryItem, ProjectLaunchSecretSyncTargetKind, ProjectLaunchSecretValueDiagnostic, ProjectLaunchSecretValueOverlayResult, ResolveProjectLaunchSecretValueOverlayOptions, SyncProjectLaunchHostBindingSecretsOptions, } from './operations/services/template-secret-sync.ts';
|
|
43
|
+
export { deriveProjectHostBindingsView, executeProjectHostBindingOperation, planProjectHostBindingOperation, } from './operations/services/project-host-operations.ts';
|
|
44
|
+
export type { ExecuteProjectHostBindingOperationContext, ExecuteProjectHostBindingOperationInput, ExecuteProjectHostBindingOperationResult, PlanProjectHostBindingOperationOptions, PlanProjectHostBindingOperationResult, ProjectHostBindingsView, ProjectHostOperationDiagnostic, ProjectHostOperationKind, ProjectHostOperationStatus, ProjectHostRequirementBindingView, } from './operations/services/project-host-operations.ts';
|
|
35
45
|
export { MarketClient, MarketApiError, DEFAULT_TREESEED_MARKET_BASE_URL, TREESEED_CATALOG_MARKET_API_BASE_URLS_ENV, TREESEED_CENTRAL_MARKET_API_BASE_URL_ENV, TREESEED_MARKET_API_BASE_URL_ENV, addMarketProfile, clearMarketSession, listIntegratedMarketCatalog, loadMarketRegistryState, removeMarketProfile, resolveCatalogMarketProfiles, resolveDefaultCentralMarketBaseUrl, resolveIntegratedCatalogArtifactDownload, resolveMarketProfile, resolveMarketSession, setActiveMarketProfile, setMarketSession, verifyArtifactBytes, writeMarketRegistryState, } from './market-client.ts';
|
|
36
46
|
export { TREESEED_REMOTE_CONTRACT_HEADER, TREESEED_REMOTE_CONTRACT_VERSION, CloudflareQueuePullClient, CloudflareQueuePushClient, RemoteTreeseedClient, RemoteTreeseedAuthClient, RemoteTreeseedDispatchClient, RemoteTreeseedJobsClient, RemoteTreeseedRunnerClient, RemoteTreeseedSdkClient, RemoteTreeseedOperationsClient, } from './remote.ts';
|
|
37
47
|
export { TRESEED_OPERATION_SPECS, findTreeseedOperation, listTreeseedOperationNames, } from './operations-registry.ts';
|
|
@@ -40,7 +50,7 @@ export { TreeseedWorkflowSdk } from './workflow.ts';
|
|
|
40
50
|
export * from './db/index.ts';
|
|
41
51
|
export { collectTreeseedReconcileStatus, createTreeseedReconcileRegistry, deriveTreeseedDesiredUnits, destroyTreeseedTargetUnits, observeTreeseedUnits, planTreeseedReconciliation, reconcileTreeseedTarget, } from './reconcile/index.ts';
|
|
42
52
|
export { getTreeseedVerifyDriverStatus, runTreeseedVerifyDriver } from './verification.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';
|
|
53
|
+
export type { KnowledgeHubProviderLaunchPreflightReport, KnowledgeHubProviderLaunchFailurePhase, KnowledgeHubProviderLaunchInput, KnowledgeHubProviderLaunchResult, AgentMessageKind, AgentMessageRecord, AgentStatusRecord, DirectBoardItemSummary, InboxItem, ProjectJobStatus, LaunchProjectRequest, LaunchProjectResult, ProjectLaunchHostBindingInput, 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, TemplateConfigWrite, TemplateEnvironmentWrite, TemplateHostRequirement, TemplateLaunchRequirements, TemplateResourceRequirement, TemplateSecretRequirement, 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';
|
|
44
54
|
export type * from './project-workflow.ts';
|
|
45
55
|
export type { ControlPlaneAgentPoolHeartbeat, ControlPlaneDeploymentReport, ControlPlaneEnvironmentReport, ControlPlaneReporter, ControlPlaneReporterKind, ControlPlaneResourceReport, ControlPlaneScaleDecisionReport, ControlPlaneWorkdaySummaryReport, } from './control-plane.ts';
|
|
46
56
|
export type { ControlPlaneClientOptions } from './control-plane-client.ts';
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AgentSdk, ScopedAgentSdk } from "./sdk.js";
|
|
2
2
|
import { ContentGraphRuntime } from "./graph.js";
|
|
3
|
-
import { projectConnectionModeFromHosting } from "./sdk-types.js";
|
|
3
|
+
import { TREESEED_DEFAULT_STARTER_TEMPLATE_ID, projectConnectionModeFromHosting } from "./sdk-types.js";
|
|
4
4
|
import { createControlPlaneReporter } from "./control-plane.js";
|
|
5
5
|
import { ControlPlaneClient } from "./control-plane-client.js";
|
|
6
6
|
export * from "./seeds/index.js";
|
|
@@ -259,6 +259,31 @@ import {
|
|
|
259
259
|
validateModelFieldAliases
|
|
260
260
|
} from "./sdk-fields.js";
|
|
261
261
|
import { RemoteTemplateCatalogClient, parseTemplateCatalogResponse } from "./template-catalog.js";
|
|
262
|
+
import {
|
|
263
|
+
normalizeProjectLaunchHostBindings,
|
|
264
|
+
normalizeTemplateLaunchRequirements,
|
|
265
|
+
parseProjectLaunchHostBindingSpecs,
|
|
266
|
+
resolveProjectLaunchHostBindings,
|
|
267
|
+
validateTemplateLaunchRequirements
|
|
268
|
+
} from "./template-launch-requirements.js";
|
|
269
|
+
import {
|
|
270
|
+
deriveProjectLaunchRequirementsViewModel
|
|
271
|
+
} from "./template-launch-ui.js";
|
|
272
|
+
import {
|
|
273
|
+
applyProjectLaunchHostBindingConfig,
|
|
274
|
+
auditProjectLaunchHostBindingConfig,
|
|
275
|
+
preserveProjectLaunchHostBindingConfigOverlay
|
|
276
|
+
} from "./operations/services/template-host-bindings.js";
|
|
277
|
+
import {
|
|
278
|
+
ProjectLaunchSecretSyncError,
|
|
279
|
+
resolveProjectLaunchSecretValueOverlay,
|
|
280
|
+
syncProjectLaunchHostBindingSecrets
|
|
281
|
+
} from "./operations/services/template-secret-sync.js";
|
|
282
|
+
import {
|
|
283
|
+
deriveProjectHostBindingsView,
|
|
284
|
+
executeProjectHostBindingOperation,
|
|
285
|
+
planProjectHostBindingOperation
|
|
286
|
+
} from "./operations/services/project-host-operations.js";
|
|
262
287
|
import {
|
|
263
288
|
MarketClient,
|
|
264
289
|
MarketApiError,
|
|
@@ -352,6 +377,7 @@ export {
|
|
|
352
377
|
PUBLISHED_CONTENT_MANIFEST_SCHEMA_VERSION,
|
|
353
378
|
PlatformOperationApiError,
|
|
354
379
|
PlatformRunnerClient,
|
|
380
|
+
ProjectLaunchSecretSyncError,
|
|
355
381
|
RELEASE_STATES,
|
|
356
382
|
RemoteTemplateCatalogClient,
|
|
357
383
|
RemoteTreeseedAuthClient,
|
|
@@ -365,6 +391,7 @@ export {
|
|
|
365
391
|
ScopedAgentSdk,
|
|
366
392
|
TREESEED_CATALOG_MARKET_API_BASE_URLS_ENV,
|
|
367
393
|
TREESEED_CENTRAL_MARKET_API_BASE_URL_ENV,
|
|
394
|
+
TREESEED_DEFAULT_STARTER_TEMPLATE_ID,
|
|
368
395
|
TREESEED_MARKET_API_BASE_URL_ENV,
|
|
369
396
|
TREESEED_REMOTE_CONTRACT_HEADER,
|
|
370
397
|
TREESEED_REMOTE_CONTRACT_VERSION,
|
|
@@ -375,12 +402,14 @@ export {
|
|
|
375
402
|
TreeseedWorkflowSdk,
|
|
376
403
|
WORKSTREAM_STATES,
|
|
377
404
|
addMarketProfile,
|
|
405
|
+
applyProjectLaunchHostBindingConfig,
|
|
378
406
|
assertCapacityProviderOkEnvelope,
|
|
379
407
|
assertCapacityProviderPortfolioManifest,
|
|
380
408
|
assertCapacityProviderRegistrationResponse,
|
|
381
409
|
assertPlatformOperation,
|
|
382
410
|
assertPlatformOperationEvent,
|
|
383
411
|
assertPlatformOperationOkEnvelope,
|
|
412
|
+
auditProjectLaunchHostBindingConfig,
|
|
384
413
|
buildBuiltinModelRegistry,
|
|
385
414
|
buildCapacityProviderAuthHeaders,
|
|
386
415
|
buildCopilotAllowToolArgs,
|
|
@@ -425,6 +454,8 @@ export {
|
|
|
425
454
|
deriveAvailableCredits,
|
|
426
455
|
derivePlatformOperationNavigation,
|
|
427
456
|
derivePlatformRepositoryKey,
|
|
457
|
+
deriveProjectHostBindingsView,
|
|
458
|
+
deriveProjectLaunchRequirementsViewModel,
|
|
428
459
|
deriveTreeseedDesiredUnits,
|
|
429
460
|
destroyTreeseedTargetUnits,
|
|
430
461
|
dispatchGitHubWorkflowRun,
|
|
@@ -441,6 +472,7 @@ export {
|
|
|
441
472
|
executeKnowledgeHubLaunch,
|
|
442
473
|
executeKnowledgeHubProviderLaunch,
|
|
443
474
|
executePlatformRepositoryOperation,
|
|
475
|
+
executeProjectHostBindingOperation,
|
|
444
476
|
executeSdkOperation,
|
|
445
477
|
findDispatchCapability,
|
|
446
478
|
findSdkOperation,
|
|
@@ -489,14 +521,17 @@ export {
|
|
|
489
521
|
normalizePlatformRelationArray,
|
|
490
522
|
normalizePredictiveReservePolicy,
|
|
491
523
|
normalizeProjectJobStatus,
|
|
524
|
+
normalizeProjectLaunchHostBindings,
|
|
492
525
|
normalizeRecordToCanonicalShape,
|
|
493
526
|
normalizeRemoteJobStatus,
|
|
494
527
|
normalizeSortFields,
|
|
495
528
|
normalizeTaskAdmissionPolicy,
|
|
496
529
|
normalizeTaskPlanProposal,
|
|
530
|
+
normalizeTemplateLaunchRequirements,
|
|
497
531
|
normalizeUtilityPolicy,
|
|
498
532
|
observeTreeseedUnits,
|
|
499
533
|
parseGraphDsl,
|
|
534
|
+
parseProjectLaunchHostBindingSpecs,
|
|
500
535
|
parsePublishedCollectionIndex,
|
|
501
536
|
parsePublishedContentManifest,
|
|
502
537
|
parsePublishedOverlayManifest,
|
|
@@ -504,11 +539,13 @@ export {
|
|
|
504
539
|
persistCapacityProviderConnectionToTreeseedConfig,
|
|
505
540
|
planKnowledgeHubLaunch,
|
|
506
541
|
planKnowledgeHubRepositories,
|
|
542
|
+
planProjectHostBindingOperation,
|
|
507
543
|
planTreeseedReconciliation,
|
|
508
544
|
platformContentRelationPolicy,
|
|
509
545
|
pollPlatformOperation,
|
|
510
546
|
predictReserveForCapacityPlan,
|
|
511
547
|
preprocessAliasedRecord,
|
|
548
|
+
preserveProjectLaunchHostBindingConfigOverlay,
|
|
512
549
|
progressivelyAdmitPlanProposal,
|
|
513
550
|
projectConnectionModeFromHosting,
|
|
514
551
|
railwayGraphqlRequest,
|
|
@@ -536,6 +573,8 @@ export {
|
|
|
536
573
|
resolveModelDefinition,
|
|
537
574
|
resolveModelField,
|
|
538
575
|
resolvePlatformRepositoryWorkspacePath,
|
|
576
|
+
resolveProjectLaunchHostBindings,
|
|
577
|
+
resolveProjectLaunchSecretValueOverlay,
|
|
539
578
|
resolvePublishedContentBucketBinding,
|
|
540
579
|
resolvePublishedContentManifestKey,
|
|
541
580
|
resolvePublishedContentPreviewRoot,
|
|
@@ -566,6 +605,7 @@ export {
|
|
|
566
605
|
summarizeCapacityPlan,
|
|
567
606
|
summarizeProjectCapacityPlan,
|
|
568
607
|
summarizeTeamCapacityPlan,
|
|
608
|
+
syncProjectLaunchHostBindingSecrets,
|
|
569
609
|
synthesizePlanEstimate,
|
|
570
610
|
tenantFeatureEnabled,
|
|
571
611
|
tenantModelRendered,
|
|
@@ -574,6 +614,7 @@ export {
|
|
|
574
614
|
validateModelFieldAliases,
|
|
575
615
|
validateRepositoryHost,
|
|
576
616
|
validateTaskPlanProposal,
|
|
617
|
+
validateTemplateLaunchRequirements,
|
|
577
618
|
verifyArtifactBytes,
|
|
578
619
|
verifyEditorialPreviewToken,
|
|
579
620
|
waitForGitHubWorkflowRunCompletion,
|
package/dist/market-client.d.ts
CHANGED
|
@@ -365,6 +365,29 @@ export declare class MarketClient {
|
|
|
365
365
|
environments: ProjectEnvironmentAccess[];
|
|
366
366
|
};
|
|
367
367
|
}>;
|
|
368
|
+
projectHosts(projectId: string): Promise<{
|
|
369
|
+
ok: true;
|
|
370
|
+
payload: Record<string, unknown>;
|
|
371
|
+
}>;
|
|
372
|
+
auditProjectHosts(projectId: string, body?: Record<string, unknown>): Promise<{
|
|
373
|
+
ok: true;
|
|
374
|
+
payload: Record<string, unknown>;
|
|
375
|
+
}>;
|
|
376
|
+
replaceProjectHost(projectId: string, requirementKey: string, body?: Record<string, unknown>): Promise<{
|
|
377
|
+
ok: true;
|
|
378
|
+
payload: Record<string, unknown>;
|
|
379
|
+
operation: Record<string, unknown>;
|
|
380
|
+
}>;
|
|
381
|
+
resyncProjectHost(projectId: string, requirementKey: string, body?: Record<string, unknown>): Promise<{
|
|
382
|
+
ok: true;
|
|
383
|
+
payload: Record<string, unknown>;
|
|
384
|
+
operation: Record<string, unknown>;
|
|
385
|
+
}>;
|
|
386
|
+
rotateProjectHost(projectId: string, requirementKey: string, body?: Record<string, unknown>): Promise<{
|
|
387
|
+
ok: true;
|
|
388
|
+
payload: Record<string, unknown>;
|
|
389
|
+
operation: Record<string, unknown>;
|
|
390
|
+
}>;
|
|
368
391
|
projectDeploymentState(projectId: string): Promise<MarketProjectDeploymentState>;
|
|
369
392
|
projectDeployments(projectId: string, filters?: ProjectDeploymentListFilters): Promise<{
|
|
370
393
|
ok: true;
|
package/dist/market-client.js
CHANGED
|
@@ -461,6 +461,36 @@ class MarketClient {
|
|
|
461
461
|
{ requireAuth: true }
|
|
462
462
|
);
|
|
463
463
|
}
|
|
464
|
+
projectHosts(projectId) {
|
|
465
|
+
return this.request(
|
|
466
|
+
`/v1/projects/${encodeURIComponent(projectId)}/hosts`,
|
|
467
|
+
{ requireAuth: true }
|
|
468
|
+
);
|
|
469
|
+
}
|
|
470
|
+
auditProjectHosts(projectId, body = {}) {
|
|
471
|
+
return this.request(
|
|
472
|
+
`/v1/projects/${encodeURIComponent(projectId)}/hosts/audit`,
|
|
473
|
+
{ method: "POST", body, requireAuth: true }
|
|
474
|
+
);
|
|
475
|
+
}
|
|
476
|
+
replaceProjectHost(projectId, requirementKey, body = {}) {
|
|
477
|
+
return this.request(
|
|
478
|
+
`/v1/projects/${encodeURIComponent(projectId)}/hosts/${encodeURIComponent(requirementKey)}/replace`,
|
|
479
|
+
{ method: "POST", body, requireAuth: true }
|
|
480
|
+
);
|
|
481
|
+
}
|
|
482
|
+
resyncProjectHost(projectId, requirementKey, body = {}) {
|
|
483
|
+
return this.request(
|
|
484
|
+
`/v1/projects/${encodeURIComponent(projectId)}/hosts/${encodeURIComponent(requirementKey)}/resync`,
|
|
485
|
+
{ method: "POST", body, requireAuth: true }
|
|
486
|
+
);
|
|
487
|
+
}
|
|
488
|
+
rotateProjectHost(projectId, requirementKey, body = {}) {
|
|
489
|
+
return this.request(
|
|
490
|
+
`/v1/projects/${encodeURIComponent(projectId)}/hosts/${encodeURIComponent(requirementKey)}/rotate`,
|
|
491
|
+
{ method: "POST", body, requireAuth: true }
|
|
492
|
+
);
|
|
493
|
+
}
|
|
464
494
|
projectDeploymentState(projectId) {
|
|
465
495
|
return this.request(
|
|
466
496
|
`/v1/projects/${encodeURIComponent(projectId)}/deployment-state`,
|
|
@@ -41,11 +41,14 @@ import {
|
|
|
41
41
|
import {
|
|
42
42
|
scaffoldTemplateProject,
|
|
43
43
|
listTemplateProducts,
|
|
44
|
+
recordTemplateHostBindingState,
|
|
45
|
+
resolveTemplateDefinition,
|
|
44
46
|
resolveTemplateProduct,
|
|
45
47
|
serializeTemplateRegistryEntry,
|
|
46
48
|
syncTemplateProject,
|
|
47
49
|
validateTemplateProduct
|
|
48
50
|
} from "../../operations/services/template-registry.js";
|
|
51
|
+
import { applyProjectLaunchHostBindingConfig } from "../../operations/services/template-host-bindings.js";
|
|
49
52
|
import { validateKnowledgeHubProviderLaunchPrerequisites } from "../../operations/services/hub-provider-launch.js";
|
|
50
53
|
import { publishProjectContent } from "../../operations/services/project-platform.js";
|
|
51
54
|
import {
|
|
@@ -59,6 +62,11 @@ import {
|
|
|
59
62
|
formatCliPreflightReport
|
|
60
63
|
} from "../../operations/services/workspace-preflight.js";
|
|
61
64
|
import { repoRoot } from "../../operations/services/workspace-save.js";
|
|
65
|
+
import { TREESEED_DEFAULT_STARTER_TEMPLATE_ID } from "../../sdk-types.js";
|
|
66
|
+
import {
|
|
67
|
+
parseProjectLaunchHostBindingSpecs,
|
|
68
|
+
resolveProjectLaunchHostBindings
|
|
69
|
+
} from "../../template-launch-requirements.js";
|
|
62
70
|
import { run } from "../../operations/services/workspace-tools.js";
|
|
63
71
|
import { resolveTreeseedWorkflowState } from "../../workflow-state.js";
|
|
64
72
|
import { TreeseedWorkflowError, TreeseedWorkflowSdk } from "../../workflow.js";
|
|
@@ -308,16 +316,74 @@ class InitOperation extends BaseOperation {
|
|
|
308
316
|
if (!directory) {
|
|
309
317
|
return failureResult(this.metadata, "Init requires a target directory.");
|
|
310
318
|
}
|
|
319
|
+
const templateId = String(input.template ?? TREESEED_DEFAULT_STARTER_TEMPLATE_ID);
|
|
320
|
+
const writeWarning = (message) => context.write?.(message, "stderr");
|
|
321
|
+
const templateOptions = {
|
|
322
|
+
cwd: context.cwd,
|
|
323
|
+
env: contextEnv(context),
|
|
324
|
+
writeWarning
|
|
325
|
+
};
|
|
326
|
+
const targetRoot = resolve(context.cwd, directory);
|
|
327
|
+
const projectSlug = typeof input.slug === "string" && input.slug.trim() ? input.slug.trim() : directory.toLowerCase().replace(/[^a-z0-9-]+/g, "-");
|
|
328
|
+
const projectName = typeof input.name === "string" && input.name.trim() ? input.name.trim() : directory;
|
|
329
|
+
const siteUrl = typeof input.siteUrl === "string" ? input.siteUrl : null;
|
|
330
|
+
const domains = (() => {
|
|
331
|
+
if (!siteUrl) return null;
|
|
332
|
+
try {
|
|
333
|
+
const hostname = new URL(siteUrl).hostname;
|
|
334
|
+
return hostname ? {
|
|
335
|
+
productionDomain: hostname,
|
|
336
|
+
stagingDomain: `staging.${hostname}`
|
|
337
|
+
} : null;
|
|
338
|
+
} catch {
|
|
339
|
+
return null;
|
|
340
|
+
}
|
|
341
|
+
})();
|
|
342
|
+
const hostBindingSpecs = [
|
|
343
|
+
...Array.isArray(input.hostBindingSpecs) ? input.hostBindingSpecs.map(String) : typeof input.hostBindingSpecs === "string" ? [input.hostBindingSpecs] : [],
|
|
344
|
+
...Array.isArray(input.host) ? input.host.map(String) : typeof input.host === "string" ? [input.host] : []
|
|
345
|
+
];
|
|
346
|
+
const templateDefinition = await resolveTemplateDefinition(templateId, templateOptions);
|
|
347
|
+
const resolvedHostBindingState = hostBindingSpecs.length > 0 ? (() => {
|
|
348
|
+
const parsed = parseProjectLaunchHostBindingSpecs({
|
|
349
|
+
specs: hostBindingSpecs,
|
|
350
|
+
launchRequirements: templateDefinition.manifest.launchRequirements
|
|
351
|
+
});
|
|
352
|
+
const resolved = resolveProjectLaunchHostBindings({
|
|
353
|
+
hostBindings: parsed.hostBindings,
|
|
354
|
+
launchRequirements: templateDefinition.manifest.launchRequirements,
|
|
355
|
+
repositoryHosts: parsed.repositoryHosts,
|
|
356
|
+
teamHosts: parsed.teamHosts,
|
|
357
|
+
managedHosts: parsed.managedHosts,
|
|
358
|
+
projectSlug,
|
|
359
|
+
projectName,
|
|
360
|
+
domains,
|
|
361
|
+
standardProjectLaunch: true
|
|
362
|
+
});
|
|
363
|
+
return {
|
|
364
|
+
parsed,
|
|
365
|
+
resolved,
|
|
366
|
+
state: {
|
|
367
|
+
hostBindings: resolved.hostBindings,
|
|
368
|
+
hostBindingPlans: {
|
|
369
|
+
configWrites: resolved.configWritePlan,
|
|
370
|
+
secretDeployment: resolved.secretDeploymentPlan
|
|
371
|
+
},
|
|
372
|
+
hostBindingSummaries: [...parsed.summaries, ...parsed.omitted],
|
|
373
|
+
hostBindingConfig: null
|
|
374
|
+
}
|
|
375
|
+
};
|
|
376
|
+
})() : null;
|
|
311
377
|
const launchPlan = planKnowledgeHubLaunch({
|
|
312
378
|
team: { id: typeof input.teamId === "string" ? input.teamId : "local" },
|
|
313
379
|
hub: {
|
|
314
|
-
name:
|
|
315
|
-
slug:
|
|
380
|
+
name: projectName,
|
|
381
|
+
slug: projectSlug,
|
|
316
382
|
visibility: "team"
|
|
317
383
|
},
|
|
318
384
|
source: {
|
|
319
385
|
kind: "template",
|
|
320
|
-
ref:
|
|
386
|
+
ref: templateId
|
|
321
387
|
},
|
|
322
388
|
repository: {
|
|
323
389
|
topology: input.repositoryTopology === "split_software_content" ? "split_software_content" : "combined_compatibility",
|
|
@@ -326,22 +392,49 @@ class InitOperation extends BaseOperation {
|
|
|
326
392
|
hosting: { mode: "self_hosted" }
|
|
327
393
|
});
|
|
328
394
|
const definition = await scaffoldTemplateProject(
|
|
329
|
-
|
|
330
|
-
|
|
395
|
+
templateId,
|
|
396
|
+
targetRoot,
|
|
331
397
|
{
|
|
332
398
|
target: directory,
|
|
333
|
-
name:
|
|
334
|
-
slug:
|
|
335
|
-
siteUrl
|
|
399
|
+
name: projectName,
|
|
400
|
+
slug: projectSlug,
|
|
401
|
+
siteUrl,
|
|
336
402
|
contactEmail: typeof input.contactEmail === "string" ? input.contactEmail : null,
|
|
337
403
|
repositoryUrl: typeof input.repositoryUrl === "string" ? input.repositoryUrl : typeof input.repo === "string" ? input.repo : null,
|
|
338
|
-
discordUrl: typeof input.discordUrl === "string" ? input.discordUrl : typeof input.discord === "string" ? input.discord : void 0
|
|
404
|
+
discordUrl: typeof input.discordUrl === "string" ? input.discordUrl : typeof input.discord === "string" ? input.discord : void 0,
|
|
405
|
+
hostBindingState: resolvedHostBindingState?.state ?? null
|
|
339
406
|
},
|
|
340
|
-
|
|
407
|
+
templateOptions
|
|
341
408
|
);
|
|
409
|
+
const hostBindingConfig = resolvedHostBindingState ? applyProjectLaunchHostBindingConfig({
|
|
410
|
+
projectRoot: targetRoot,
|
|
411
|
+
hostBindings: resolvedHostBindingState.resolved.hostBindings,
|
|
412
|
+
hostBindingPlans: resolvedHostBindingState.state.hostBindingPlans,
|
|
413
|
+
launchInput: {
|
|
414
|
+
projectSlug,
|
|
415
|
+
projectName,
|
|
416
|
+
repoName: projectSlug,
|
|
417
|
+
domains
|
|
418
|
+
},
|
|
419
|
+
derived: {
|
|
420
|
+
projectSlug,
|
|
421
|
+
projectName,
|
|
422
|
+
repositoryName: projectSlug
|
|
423
|
+
}
|
|
424
|
+
}) : null;
|
|
425
|
+
if (resolvedHostBindingState && hostBindingConfig) {
|
|
426
|
+
recordTemplateHostBindingState(targetRoot, {
|
|
427
|
+
...resolvedHostBindingState.state,
|
|
428
|
+
hostBindingConfig
|
|
429
|
+
});
|
|
430
|
+
}
|
|
342
431
|
return operationResult(this.metadata, {
|
|
343
432
|
directory,
|
|
344
433
|
template: definition.id,
|
|
434
|
+
hostBindings: resolvedHostBindingState?.resolved.hostBindings ?? {},
|
|
435
|
+
hostBindingPlans: resolvedHostBindingState?.state.hostBindingPlans ?? null,
|
|
436
|
+
hostBindingSummaries: resolvedHostBindingState?.state.hostBindingSummaries ?? [],
|
|
437
|
+
hostBindingConfig,
|
|
345
438
|
launchPlan
|
|
346
439
|
});
|
|
347
440
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type ApplyProjectLaunchHostBindingConfigOptions } from './services/template-host-bindings.ts';
|
|
1
2
|
export declare const PLATFORM_CONTENT_COLLECTIONS: readonly ["objectives", "questions", "notes", "proposals", "decisions", "agents"];
|
|
2
3
|
export declare const PLATFORM_WORK_CONTENT_COLLECTIONS: readonly ["objectives", "questions", "notes", "proposals", "decisions"];
|
|
3
4
|
export type PlatformContentCollection = (typeof PLATFORM_CONTENT_COLLECTIONS)[number];
|
|
@@ -63,6 +64,10 @@ export interface PlatformRepositoryOperationInput {
|
|
|
63
64
|
commitMessage?: string;
|
|
64
65
|
approvalRequired?: boolean;
|
|
65
66
|
approvalId?: string;
|
|
67
|
+
hostBindings?: ApplyProjectLaunchHostBindingConfigOptions['hostBindings'];
|
|
68
|
+
hostBindingPlans?: ApplyProjectLaunchHostBindingConfigOptions['hostBindingPlans'];
|
|
69
|
+
launchInput?: ApplyProjectLaunchHostBindingConfigOptions['launchInput'];
|
|
70
|
+
derived?: ApplyProjectLaunchHostBindingConfigOptions['derived'];
|
|
66
71
|
}
|
|
67
72
|
export interface PlatformRepositoryOperationOptions {
|
|
68
73
|
workspaceRoot: string;
|
|
@@ -126,4 +131,4 @@ export declare function normalizePlatformContentInput(collection: string, body:
|
|
|
126
131
|
export declare function derivePlatformRepositoryKey(repository: PlatformRepositoryDescriptor): string;
|
|
127
132
|
export declare function resolvePlatformRepositoryWorkspacePath(workspaceRoot: string, repository: PlatformRepositoryDescriptor): string;
|
|
128
133
|
export declare function createPlatformRepositoryClaim(input: PlatformRepositoryClaimInput): PlatformRepositoryClaim;
|
|
129
|
-
export declare function executePlatformRepositoryOperation(operation: 'write_content_record' | 'create_related_content' | 'create_decision_from_proposals' | string, input: PlatformRepositoryOperationInput, options: PlatformRepositoryOperationOptions): Promise<PlatformRepositoryOperationResult>;
|
|
134
|
+
export declare function executePlatformRepositoryOperation(operation: 'write_content_record' | 'create_related_content' | 'create_decision_from_proposals' | 'apply_host_binding_config' | 'audit_host_binding_config' | string, input: PlatformRepositoryOperationInput, options: PlatformRepositoryOperationOptions): Promise<PlatformRepositoryOperationResult>;
|
|
@@ -4,6 +4,10 @@ import { mkdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
|
4
4
|
import { dirname, relative, resolve } from "node:path";
|
|
5
5
|
import { promisify } from "node:util";
|
|
6
6
|
import { serializeFrontmatterDocument, parseFrontmatterDocument } from "../frontmatter.js";
|
|
7
|
+
import {
|
|
8
|
+
applyProjectLaunchHostBindingConfig,
|
|
9
|
+
auditProjectLaunchHostBindingConfig
|
|
10
|
+
} from "./services/template-host-bindings.js";
|
|
7
11
|
const execFileAsync = promisify(execFile);
|
|
8
12
|
const PLATFORM_CONTENT_COLLECTIONS = ["objectives", "questions", "notes", "proposals", "decisions", "agents"];
|
|
9
13
|
const PLATFORM_WORK_CONTENT_COLLECTIONS = ["objectives", "questions", "notes", "proposals", "decisions"];
|
|
@@ -572,6 +576,19 @@ function outputHref(output) {
|
|
|
572
576
|
}
|
|
573
577
|
return null;
|
|
574
578
|
}
|
|
579
|
+
const HOST_BINDING_CONFIG_PATHS = /* @__PURE__ */ new Set([
|
|
580
|
+
"treeseed.site.yaml",
|
|
581
|
+
"src/env.yaml",
|
|
582
|
+
"src/manifest.yaml",
|
|
583
|
+
"package.json"
|
|
584
|
+
]);
|
|
585
|
+
function assertHostBindingChangedPaths(changed) {
|
|
586
|
+
for (const changedPath of changed) {
|
|
587
|
+
if (!HOST_BINDING_CONFIG_PATHS.has(changedPath)) {
|
|
588
|
+
throw new Error(`Host binding repository operation attempted to change unsupported path "${changedPath}".`);
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
}
|
|
575
592
|
async function executePlatformRepositoryOperation(operation, input, options) {
|
|
576
593
|
if (!input.repository?.cloneUrl || !input.repository.name) {
|
|
577
594
|
throw new Error("Repository operation requires a repository descriptor with name and cloneUrl.");
|
|
@@ -592,11 +609,38 @@ async function executePlatformRepositoryOperation(operation, input, options) {
|
|
|
592
609
|
output = await createRelatedContent(repoPath, input);
|
|
593
610
|
} else if (operation === "create_decision_from_proposals") {
|
|
594
611
|
output = await createDecisionFromProposals(repoPath, input);
|
|
612
|
+
} else if (operation === "apply_host_binding_config") {
|
|
613
|
+
const hostBindingConfig = applyProjectLaunchHostBindingConfig({
|
|
614
|
+
projectRoot: repoPath,
|
|
615
|
+
hostBindings: input.hostBindings,
|
|
616
|
+
hostBindingPlans: input.hostBindingPlans,
|
|
617
|
+
launchInput: input.launchInput,
|
|
618
|
+
derived: input.derived
|
|
619
|
+
});
|
|
620
|
+
output = {
|
|
621
|
+
hostBindingConfig,
|
|
622
|
+
changedPaths: hostBindingConfig.targets
|
|
623
|
+
};
|
|
624
|
+
} else if (operation === "audit_host_binding_config") {
|
|
625
|
+
const hostBindingAudit = auditProjectLaunchHostBindingConfig({
|
|
626
|
+
projectRoot: repoPath,
|
|
627
|
+
hostBindings: input.hostBindings,
|
|
628
|
+
hostBindingPlans: input.hostBindingPlans,
|
|
629
|
+
launchInput: input.launchInput,
|
|
630
|
+
derived: input.derived
|
|
631
|
+
});
|
|
632
|
+
output = {
|
|
633
|
+
hostBindingAudit,
|
|
634
|
+
changedPaths: []
|
|
635
|
+
};
|
|
595
636
|
} else {
|
|
596
637
|
throw new Error(`Unsupported repository operation "${operation}".`);
|
|
597
638
|
}
|
|
598
639
|
const gitChanged = await changedPaths(repoPath);
|
|
599
640
|
const changed = gitChanged.length > 0 ? gitChanged : changedPathsFromOutput(output);
|
|
641
|
+
if (operation === "apply_host_binding_config" || operation === "audit_host_binding_config") {
|
|
642
|
+
assertHostBindingChangedPaths(changed);
|
|
643
|
+
}
|
|
600
644
|
const verification = await runVerificationCommands(repoPath, input.repository);
|
|
601
645
|
const commit = await commitIfRequested(repoPath, input.repository, input, changed);
|
|
602
646
|
return {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type TreeseedTimingEntry } from '../../timing.ts';
|
|
1
2
|
export type TreeseedBootstrapExecution = 'parallel' | 'sequential';
|
|
2
3
|
export type TreeseedBootstrapStream = 'stdout' | 'stderr';
|
|
3
4
|
export type TreeseedBootstrapWriter = (line: string, stream?: TreeseedBootstrapStream) => void;
|
|
@@ -11,13 +12,16 @@ export type TreeseedBootstrapDagNode<TResult = unknown> = {
|
|
|
11
12
|
id: string;
|
|
12
13
|
dependencies?: string[];
|
|
13
14
|
run: () => Promise<TResult> | TResult;
|
|
15
|
+
label?: string;
|
|
14
16
|
};
|
|
15
17
|
export declare function formatTreeseedBootstrapPrefix(prefix: TreeseedBootstrapTaskPrefix): string;
|
|
16
18
|
export declare function formatTreeseedBootstrapLine(prefix: TreeseedBootstrapTaskPrefix, line: string): string;
|
|
17
19
|
export declare function writeTreeseedBootstrapLine(write: TreeseedBootstrapWriter | undefined, prefix: TreeseedBootstrapTaskPrefix, line: string, stream?: TreeseedBootstrapStream): void;
|
|
18
|
-
export declare function runTreeseedBootstrapDag<TResult = unknown>({ nodes, execution, }: {
|
|
20
|
+
export declare function runTreeseedBootstrapDag<TResult = unknown>({ nodes, execution, write, timings, }: {
|
|
19
21
|
nodes: Array<TreeseedBootstrapDagNode<TResult>>;
|
|
20
22
|
execution?: TreeseedBootstrapExecution;
|
|
23
|
+
write?: TreeseedBootstrapWriter;
|
|
24
|
+
timings?: TreeseedTimingEntry[];
|
|
21
25
|
}): Promise<Map<string, TResult>>;
|
|
22
26
|
export declare function sleep(milliseconds: number): Promise<void>;
|
|
23
27
|
export declare function runPrefixedCommand(command: string, args: string[], { cwd, env, input, write, prefix, }: {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
|
+
import { elapsedMs, formatDurationMs } from "../../timing.js";
|
|
2
3
|
function formatTreeseedBootstrapPrefix(prefix) {
|
|
3
4
|
return `[${prefix.scope}][${prefix.system}][${prefix.task}][${prefix.stage}]`;
|
|
4
5
|
}
|
|
@@ -43,19 +44,47 @@ function dependencyLevels(nodes) {
|
|
|
43
44
|
}
|
|
44
45
|
async function runTreeseedBootstrapDag({
|
|
45
46
|
nodes,
|
|
46
|
-
execution = "parallel"
|
|
47
|
+
execution = "parallel",
|
|
48
|
+
write,
|
|
49
|
+
timings
|
|
47
50
|
}) {
|
|
48
51
|
const results = /* @__PURE__ */ new Map();
|
|
52
|
+
const recordNode = async (node) => {
|
|
53
|
+
const label = node.label ?? node.id;
|
|
54
|
+
const startMs = performance.now();
|
|
55
|
+
const entry = {
|
|
56
|
+
name: `bootstrap:${label}`,
|
|
57
|
+
durationMs: 0,
|
|
58
|
+
status: "running",
|
|
59
|
+
metadata: { nodeId: node.id, dependencies: node.dependencies ?? [] }
|
|
60
|
+
};
|
|
61
|
+
timings?.push(entry);
|
|
62
|
+
write?.(`[bootstrap][${node.id}] started`);
|
|
63
|
+
try {
|
|
64
|
+
const result = await Promise.resolve(node.run());
|
|
65
|
+
entry.durationMs = elapsedMs(startMs);
|
|
66
|
+
entry.status = "success";
|
|
67
|
+
write?.(`[bootstrap][${node.id}] completed in ${formatDurationMs(entry.durationMs)}`);
|
|
68
|
+
results.set(node.id, result);
|
|
69
|
+
} catch (error) {
|
|
70
|
+
entry.durationMs = elapsedMs(startMs);
|
|
71
|
+
entry.status = "failed";
|
|
72
|
+
entry.metadata = {
|
|
73
|
+
...entry.metadata ?? {},
|
|
74
|
+
error: error instanceof Error ? error.message : String(error)
|
|
75
|
+
};
|
|
76
|
+
write?.(`[bootstrap][${node.id}] failed after ${formatDurationMs(entry.durationMs)}`, "stderr");
|
|
77
|
+
throw error;
|
|
78
|
+
}
|
|
79
|
+
};
|
|
49
80
|
for (const level of dependencyLevels(nodes)) {
|
|
50
81
|
if (execution === "sequential") {
|
|
51
82
|
for (const node of level) {
|
|
52
|
-
|
|
83
|
+
await recordNode(node);
|
|
53
84
|
}
|
|
54
85
|
continue;
|
|
55
86
|
}
|
|
56
|
-
await Promise.all(level.map(
|
|
57
|
-
results.set(node.id, await Promise.resolve(node.run()));
|
|
58
|
-
}));
|
|
87
|
+
await Promise.all(level.map(recordNode));
|
|
59
88
|
}
|
|
60
89
|
return results;
|
|
61
90
|
}
|