spawnfile 0.1.13 → 0.1.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.
- package/README.md +50 -11
- package/dist/audit/auditCli.d.ts +19 -0
- package/dist/audit/auditCli.js +63 -0
- package/dist/audit/checks.d.ts +100 -0
- package/dist/audit/checks.js +279 -0
- package/dist/audit/checksShared.d.ts +74 -0
- package/dist/audit/checksShared.js +37 -0
- package/dist/audit/generateAudit.d.ts +19 -0
- package/dist/audit/generateAudit.js +122 -0
- package/dist/audit/index.d.ts +4 -0
- package/dist/audit/index.js +4 -0
- package/dist/audit/readAudit.d.ts +50 -0
- package/dist/audit/readAudit.js +59 -0
- package/dist/audit/types.d.ts +40 -0
- package/dist/audit/types.js +8 -0
- package/dist/auth/credentialEnvFile.d.ts +11 -0
- package/dist/auth/credentialEnvFile.js +60 -0
- package/dist/auth/credentialProvisioning.d.ts +15 -0
- package/dist/auth/credentialProvisioning.js +75 -0
- package/dist/auth/credentialProvisioningReceipt.d.ts +28 -0
- package/dist/auth/credentialProvisioningReceipt.js +70 -0
- package/dist/auth/credentialProvisioningRequest.d.ts +51 -0
- package/dist/auth/credentialProvisioningRequest.js +169 -0
- package/dist/auth/credentialWorldBindings.d.ts +21 -0
- package/dist/auth/credentialWorldBindings.js +104 -0
- package/dist/auth/index.d.ts +7 -0
- package/dist/auth/index.js +7 -0
- package/dist/auth/paths.d.ts +11 -0
- package/dist/auth/paths.js +21 -0
- package/dist/auth/targetSecretSourceAuthor.d.ts +18 -0
- package/dist/auth/targetSecretSourceAuthor.js +52 -0
- package/dist/auth/targetSecretSourceFsPublish.d.ts +15 -0
- package/dist/auth/targetSecretSourceFsPublish.js +49 -0
- package/dist/auth/targetSecretSourceFsPublishImmutable.d.ts +16 -0
- package/dist/auth/targetSecretSourceFsPublishImmutable.js +435 -0
- package/dist/auth/targetSecretSourceFsRead.d.ts +14 -0
- package/dist/auth/targetSecretSourceFsRead.js +198 -0
- package/dist/auth/targetSecretSourceGrant.d.ts +16 -0
- package/dist/auth/targetSecretSourceGrant.js +99 -0
- package/dist/auth/targetSecretSourceGrantRecords.d.ts +84 -0
- package/dist/auth/targetSecretSourceGrantRecords.js +214 -0
- package/dist/auth/targetSecretSourceLifecycle.d.ts +30 -0
- package/dist/auth/targetSecretSourceLifecycle.js +52 -0
- package/dist/auth/targetSecretSourceOwnerEntropy.d.ts +6 -0
- package/dist/auth/targetSecretSourceOwnerEntropy.js +28 -0
- package/dist/auth/targetSecretSourceRecordCommon.d.ts +14 -0
- package/dist/auth/targetSecretSourceRecordCommon.js +100 -0
- package/dist/auth/targetSecretSourceRecordPublish.d.ts +10 -0
- package/dist/auth/targetSecretSourceRecordPublish.js +104 -0
- package/dist/auth/targetSecretSourceResolver.d.ts +10 -0
- package/dist/auth/targetSecretSourceResolver.js +137 -0
- package/dist/auth/targetSecretSourceRevoke.d.ts +20 -0
- package/dist/auth/targetSecretSourceRevoke.js +92 -0
- package/dist/auth/targetSecretSourceRotate.d.ts +19 -0
- package/dist/auth/targetSecretSourceRotate.js +121 -0
- package/dist/auth/targetSecretSourceVersionRecords.d.ts +49 -0
- package/dist/auth/targetSecretSourceVersionRecords.js +166 -0
- package/dist/cli/artifactsCommands.d.ts +27 -0
- package/dist/cli/artifactsCommands.js +132 -0
- package/dist/cli/authCommands.d.ts +5 -0
- package/dist/cli/authCommands.js +221 -0
- package/dist/cli/compileBuildCommands.d.ts +3 -0
- package/dist/cli/compileBuildCommands.js +35 -0
- package/dist/cli/containerBundleCommand.d.ts +6 -0
- package/dist/cli/containerBundleCommand.js +116 -0
- package/dist/cli/downCommand.d.ts +25 -0
- package/dist/cli/downCommand.js +134 -0
- package/dist/cli/index.js +6 -3
- package/dist/cli/lifecycleCommands.d.ts +1 -1
- package/dist/cli/lifecycleCommands.js +11 -181
- package/dist/cli/lifecycleMachine.d.ts +19 -0
- package/dist/cli/lifecycleMachine.js +78 -0
- package/dist/cli/lifecyclePlan.d.ts +35 -0
- package/dist/cli/lifecyclePlan.js +240 -0
- package/dist/cli/lifecyclePlanningCommands.d.ts +3 -0
- package/dist/cli/lifecyclePlanningCommands.js +30 -0
- package/dist/cli/runCli.d.ts +9 -2
- package/dist/cli/runCli.js +27 -71
- package/dist/cli/runPublishCommands.d.ts +3 -0
- package/dist/cli/runPublishCommands.js +70 -0
- package/dist/cli/statusCommand.d.ts +3 -33
- package/dist/cli/statusCommand.js +19 -249
- package/dist/cli/statusCommandLive.d.ts +20 -0
- package/dist/cli/statusCommandLive.js +188 -0
- package/dist/cli/statusCommandOptions.d.ts +40 -0
- package/dist/cli/statusCommandOptions.js +42 -0
- package/dist/cli/targetCliRoute.d.ts +2 -0
- package/dist/cli/targetCliRoute.js +30 -0
- package/dist/cli/targetCommands.d.ts +33 -0
- package/dist/cli/targetCommands.js +257 -0
- package/dist/cli/targetComposedPreparationCommand.d.ts +6 -0
- package/dist/cli/targetComposedPreparationCommand.js +39 -0
- package/dist/cli/targetDefaultArtifactAuthority.d.ts +5 -0
- package/dist/cli/targetDefaultArtifactAuthority.js +28 -0
- package/dist/cli/targetDefaultAuthorities.d.ts +53 -0
- package/dist/cli/targetDefaultAuthorities.js +210 -0
- package/dist/cli/targetDefaultConfig.d.ts +68 -0
- package/dist/cli/targetDefaultConfig.js +317 -0
- package/dist/cli/targetDefaultConfigStdin.d.ts +13 -0
- package/dist/cli/targetDefaultConfigStdin.js +215 -0
- package/dist/cli/targetDefaultEnvelope.d.ts +1 -0
- package/dist/cli/targetDefaultEnvelope.js +13 -0
- package/dist/cli/targetDefaultHandlerFactory.d.ts +28 -0
- package/dist/cli/targetDefaultHandlerFactory.js +247 -0
- package/dist/cli/targetDefaultHandlers.d.ts +21 -0
- package/dist/cli/targetDefaultHandlers.js +72 -0
- package/dist/cli/targetDefaultJournalAuthority.d.ts +35 -0
- package/dist/cli/targetDefaultJournalAuthority.js +135 -0
- package/dist/cli/targetDefaultWorldClock.d.ts +4 -0
- package/dist/cli/targetDefaultWorldClock.js +14 -0
- package/dist/cli/targetDefaultWorldQueries.d.ts +5 -0
- package/dist/cli/targetDefaultWorldQueries.js +11 -0
- package/dist/cli/targetDefaultWorldReadiness.d.ts +4 -0
- package/dist/cli/targetDefaultWorldReadiness.js +17 -0
- package/dist/cli/targetEvidenceHelperResolution.d.ts +14 -0
- package/dist/cli/targetEvidenceHelperResolution.js +23 -0
- package/dist/cli/targetLookupCli.d.ts +3 -0
- package/dist/cli/targetLookupCli.js +31 -0
- package/dist/cli/targetLookupCommands.d.ts +12 -0
- package/dist/cli/targetLookupCommands.js +69 -0
- package/dist/cli/targetOperationDispatch.d.ts +58 -0
- package/dist/cli/targetOperationDispatch.js +21 -0
- package/dist/cli/targetReceiptOutput.d.ts +14 -0
- package/dist/cli/targetReceiptOutput.js +21 -0
- package/dist/cli/targetRequestFile.d.ts +14 -0
- package/dist/cli/targetRequestFile.js +63 -0
- package/dist/cli/targetSecretSourceInput.d.ts +28 -0
- package/dist/cli/targetSecretSourceInput.js +121 -0
- package/dist/cli/targetWorldClockCommand.d.ts +10 -0
- package/dist/cli/targetWorldClockCommand.js +42 -0
- package/dist/cli/targetWorldClockCrossProcess.test-helper.d.ts +13 -0
- package/dist/cli/targetWorldClockCrossProcess.test-helper.js +109 -0
- package/dist/cli/targetWorldReadinessCommand.d.ts +10 -0
- package/dist/cli/targetWorldReadinessCommand.js +43 -0
- package/dist/cli/upCommand.d.ts +3 -0
- package/dist/cli/upCommand.js +133 -0
- package/dist/cli/upImageCommand.d.ts +11 -0
- package/dist/cli/upImageCommand.js +41 -0
- package/dist/cli/upLifecycleInvocation.d.ts +41 -0
- package/dist/cli/upLifecycleInvocation.js +48 -0
- package/dist/cli/upLifecycleRecovery.d.ts +4 -0
- package/dist/cli/upLifecycleRecovery.js +53 -0
- package/dist/compiler/agentNodeMerge.d.ts +2 -0
- package/dist/compiler/agentNodeMerge.js +79 -0
- package/dist/compiler/agentSurfaces.js +11 -1
- package/dist/compiler/buildCompilePlan.js +17 -0
- package/dist/compiler/buildCompilePlanAgent.d.ts +11 -0
- package/dist/compiler/buildCompilePlanAgent.js +56 -0
- package/dist/compiler/buildCompilePlanTeams.d.ts +1 -0
- package/dist/compiler/buildCompilePlanTeams.js +4 -1
- package/dist/compiler/buildCompilePlanTraversal.js +75 -82
- package/dist/compiler/buildProject.d.ts +11 -0
- package/dist/compiler/buildProject.js +77 -2
- package/dist/compiler/compilePlanHelpers.js +2 -0
- package/dist/compiler/compileProject.d.ts +13 -0
- package/dist/compiler/compileProject.js +26 -74
- package/dist/compiler/compileProjectPolicy.d.ts +5 -0
- package/dist/compiler/compileProjectPolicy.js +21 -0
- package/dist/compiler/compileProjectReports.d.ts +9 -0
- package/dist/compiler/compileProjectReports.js +52 -0
- package/dist/compiler/containerArtifactSummaries.d.ts +7 -0
- package/dist/compiler/containerArtifactSummaries.js +138 -0
- package/dist/compiler/containerArtifacts.d.ts +10 -0
- package/dist/compiler/containerArtifacts.js +126 -125
- package/dist/compiler/containerArtifactsPlans.d.ts +5 -3
- package/dist/compiler/containerArtifactsPlans.js +31 -118
- package/dist/compiler/containerArtifactsRender.d.ts +3 -1
- package/dist/compiler/containerArtifactsRender.js +15 -12
- package/dist/compiler/containerArtifactsTypes.d.ts +12 -0
- package/dist/compiler/containerConfigEnvRender.d.ts +3 -0
- package/dist/compiler/containerConfigEnvRender.js +54 -0
- package/dist/compiler/containerEntrypointRender.d.ts +1 -0
- package/dist/compiler/containerEntrypointRender.js +56 -52
- package/dist/compiler/containerEntrypointShell.d.ts +5 -0
- package/dist/compiler/containerEntrypointShell.js +29 -0
- package/dist/compiler/containerPackageOverrides.d.ts +27 -0
- package/dist/compiler/containerPackageOverrides.js +63 -0
- package/dist/compiler/containerTargetPlanResolution.d.ts +20 -0
- package/dist/compiler/containerTargetPlanResolution.js +97 -0
- package/dist/compiler/daimonTelemetryArtifacts.d.ts +22 -0
- package/dist/compiler/daimonTelemetryArtifacts.js +61 -0
- package/dist/compiler/dockerBuildContext.d.ts +16 -0
- package/dist/compiler/dockerBuildContext.js +159 -0
- package/dist/compiler/dockerBuildSkip.d.ts +30 -0
- package/dist/compiler/dockerBuildSkip.js +81 -0
- package/dist/compiler/index.d.ts +4 -0
- package/dist/compiler/index.js +4 -0
- package/dist/compiler/memoryArtifacts.d.ts +26 -0
- package/dist/compiler/memoryArtifacts.js +134 -0
- package/dist/compiler/memoryResolution.d.ts +4 -0
- package/dist/compiler/memoryResolution.js +147 -0
- package/dist/compiler/modelEnv.d.ts +2 -0
- package/dist/compiler/modelEnv.js +6 -0
- package/dist/compiler/moltnetAllowedWakeSendersValidation.d.ts +2 -0
- package/dist/compiler/moltnetAllowedWakeSendersValidation.js +42 -0
- package/dist/compiler/moltnetArtifactPaths.d.ts +26 -0
- package/dist/compiler/moltnetArtifactPaths.js +49 -0
- package/dist/compiler/moltnetArtifactTypes.d.ts +46 -0
- package/dist/compiler/moltnetArtifactTypes.js +1 -0
- package/dist/compiler/moltnetArtifacts.d.ts +2 -40
- package/dist/compiler/moltnetArtifacts.js +43 -97
- package/dist/compiler/moltnetBinaries.d.ts +21 -4
- package/dist/compiler/moltnetBinaries.js +134 -27
- package/dist/compiler/moltnetClientConfig.js +7 -2
- package/dist/compiler/moltnetConfigLowering.d.ts +16 -1
- package/dist/compiler/moltnetConfigLowering.js +67 -5
- package/dist/compiler/moltnetExternalParticipantArtifact.d.ts +38 -0
- package/dist/compiler/moltnetExternalParticipantArtifact.js +188 -0
- package/dist/compiler/moltnetNodeConfig.js +7 -2
- package/dist/compiler/moltnetReleaseAuthority.d.ts +17 -0
- package/dist/compiler/moltnetReleaseAuthority.js +73 -0
- package/dist/compiler/moltnetReleaseDownload.d.ts +12 -0
- package/dist/compiler/moltnetReleaseDownload.js +85 -0
- package/dist/compiler/moltnetRepresentativeResolution.d.ts +1 -0
- package/dist/compiler/moltnetRepresentativeResolution.js +16 -2
- package/dist/compiler/moltnetResolution.js +72 -20
- package/dist/compiler/moltnetRoomMemberships.js +37 -9
- package/dist/compiler/moltnetServerPlans.d.ts +9 -0
- package/dist/compiler/moltnetServerPlans.js +132 -0
- package/dist/compiler/organizationIdentity.d.ts +27 -0
- package/dist/compiler/organizationIdentity.js +297 -0
- package/dist/compiler/organizationReadyEvidence.d.ts +49 -0
- package/dist/compiler/organizationReadyEvidence.js +261 -0
- package/dist/compiler/projectManifestGraph.d.ts +4 -0
- package/dist/compiler/projectManifestGraph.js +24 -0
- package/dist/compiler/runProject.d.ts +4 -0
- package/dist/compiler/runProject.js +30 -21
- package/dist/compiler/runProjectAuth.d.ts +7 -1
- package/dist/compiler/runProjectAuth.js +87 -9
- package/dist/compiler/runProjectDocker.d.ts +7 -0
- package/dist/compiler/runProjectDocker.js +31 -8
- package/dist/compiler/runProjectLifecycle.d.ts +7 -0
- package/dist/compiler/runProjectLifecycle.js +40 -0
- package/dist/compiler/syncProjectAuth.js +4 -1
- package/dist/compiler/teamContextActiveEnvironments.d.ts +13 -0
- package/dist/compiler/teamContextActiveEnvironments.js +255 -0
- package/dist/compiler/teamContextSupport.js +32 -40
- package/dist/compiler/teamContextTypes.d.ts +2 -0
- package/dist/compiler/types.d.ts +82 -1
- package/dist/compiler/upProject.d.ts +5 -0
- package/dist/compiler/upProject.js +256 -20
- package/dist/compiler/upReceipt.d.ts +36 -0
- package/dist/compiler/upReceipt.js +82 -0
- package/dist/compiler/updateProjectModels.js +42 -60
- package/dist/compiler/updateProjectRuntime.js +22 -35
- package/dist/compiler/updateProjectSurfaces.js +53 -47
- package/dist/compiler/worldBindings.d.ts +39 -0
- package/dist/compiler/worldBindings.js +247 -0
- package/dist/compiler/worldBindingsFile.d.ts +5 -0
- package/dist/compiler/worldBindingsFile.js +162 -0
- package/dist/deployment/artifactsExport.d.ts +49 -0
- package/dist/deployment/artifactsExport.js +217 -0
- package/dist/deployment/artifactsExportDocker.d.ts +48 -0
- package/dist/deployment/artifactsExportDocker.js +91 -0
- package/dist/deployment/artifactsExportPlan.d.ts +24 -0
- package/dist/deployment/artifactsExportPlan.js +135 -0
- package/dist/deployment/artifactsExportTypes.d.ts +50 -0
- package/dist/deployment/artifactsExportTypes.js +52 -0
- package/dist/deployment/buildImageCacheStore.d.ts +23 -0
- package/dist/deployment/buildImageCacheStore.js +54 -0
- package/dist/deployment/deploymentLifecycleCorrelation.d.ts +11 -0
- package/dist/deployment/deploymentLifecycleCorrelation.js +33 -0
- package/dist/deployment/dockerInspect.d.ts +9 -0
- package/dist/deployment/dockerInspect.js +24 -1
- package/dist/deployment/dockerLabels.d.ts +2 -0
- package/dist/deployment/dockerLabels.js +2 -0
- package/dist/deployment/dockerLogs.js +2 -10
- package/dist/deployment/dockerManager.d.ts +51 -0
- package/dist/deployment/dockerManager.js +118 -1
- package/dist/deployment/dockerProbeGateway.js +64 -5
- package/dist/deployment/dockerRecover.js +9 -1
- package/dist/deployment/dockerTeardown.d.ts +32 -0
- package/dist/deployment/dockerTeardown.js +61 -0
- package/dist/deployment/downDeployment.d.ts +34 -0
- package/dist/deployment/downDeployment.js +147 -0
- package/dist/deployment/downReceiptTypes.d.ts +21 -0
- package/dist/deployment/downReceiptTypes.js +30 -0
- package/dist/deployment/index.d.ts +16 -0
- package/dist/deployment/index.js +17 -0
- package/dist/deployment/lifecycleCompletion.d.ts +37 -0
- package/dist/deployment/lifecycleCompletion.js +236 -0
- package/dist/deployment/lifecycleCompletionContracts.d.ts +158 -0
- package/dist/deployment/lifecycleCompletionContracts.js +106 -0
- package/dist/deployment/lifecycleCompletionHeartbeat.d.ts +2 -0
- package/dist/deployment/lifecycleCompletionHeartbeat.js +50 -0
- package/dist/deployment/lifecycleCompletionLookup.d.ts +18 -0
- package/dist/deployment/lifecycleCompletionLookup.js +88 -0
- package/dist/deployment/lifecycleCompletionOwner.d.ts +8 -0
- package/dist/deployment/lifecycleCompletionOwner.js +31 -0
- package/dist/deployment/lifecycleCompletionParsing.d.ts +12 -0
- package/dist/deployment/lifecycleCompletionParsing.js +108 -0
- package/dist/deployment/lifecycleCompletionPaths.d.ts +9 -0
- package/dist/deployment/lifecycleCompletionPaths.js +16 -0
- package/dist/deployment/lifecycleCompletionPublication.d.ts +5 -0
- package/dist/deployment/lifecycleCompletionPublication.js +35 -0
- package/dist/deployment/lifecycleCompletionRecovery.d.ts +21 -0
- package/dist/deployment/lifecycleCompletionRecovery.js +56 -0
- package/dist/deployment/lifecycleCompletionRoot.d.ts +21 -0
- package/dist/deployment/lifecycleCompletionRoot.js +243 -0
- package/dist/deployment/lifecycleCompletionStore.d.ts +6 -0
- package/dist/deployment/lifecycleCompletionStore.js +151 -0
- package/dist/deployment/organizationHandoffAuthorityFsClient.d.ts +17 -0
- package/dist/deployment/organizationHandoffAuthorityFsClient.js +132 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorker.d.ts +1 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorker.js +285 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorkerParent.fixture.d.ts +1 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorkerParent.fixture.js +26 -0
- package/dist/deployment/organizationHandoffAuthorityStore.d.ts +41 -0
- package/dist/deployment/organizationHandoffAuthorityStore.js +348 -0
- package/dist/deployment/organizationHandoffAuthorityTypes.d.ts +76 -0
- package/dist/deployment/organizationHandoffAuthorityTypes.js +148 -0
- package/dist/deployment/organizationHandoffTypes.d.ts +29 -0
- package/dist/deployment/organizationHandoffTypes.js +80 -0
- package/dist/deployment/organizationReady.d.ts +52 -0
- package/dist/deployment/organizationReady.js +200 -0
- package/dist/deployment/privateArtifactsExport.d.ts +18 -0
- package/dist/deployment/privateArtifactsExport.js +80 -0
- package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.d.ts +8 -0
- package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.js +60 -0
- package/dist/deployment/record.d.ts +26 -1
- package/dist/deployment/record.js +49 -4
- package/dist/deployment/simfileFixtureBoundary.test-helper.d.ts +8 -0
- package/dist/deployment/simfileFixtureBoundary.test-helper.js +103 -0
- package/dist/deployment/target.d.ts +1 -35
- package/dist/deployment/target.js +1 -96
- package/dist/deployment/upReceiptTypes.d.ts +111 -0
- package/dist/deployment/upReceiptTypes.js +164 -0
- package/dist/dev/project.js +15 -9
- package/dist/distribution/buildDistributionReport.d.ts +2 -1
- package/dist/distribution/buildDistributionReport.js +2 -1
- package/dist/distribution/distributionReportSchema.d.ts +5 -0
- package/dist/distribution/distributionReportSchema.js +7 -2
- package/dist/distribution/index.d.ts +2 -2
- package/dist/distribution/index.js +1 -1
- package/dist/distribution/types.d.ts +7 -0
- package/dist/distribution/types.js +1 -0
- package/dist/filesystem/paths.js +10 -1
- package/dist/ledger/causalConformanceCli.d.ts +1 -0
- package/dist/ledger/causalConformanceCli.js +41 -0
- package/dist/ledger/causeNamespace.d.ts +8 -0
- package/dist/ledger/causeNamespace.js +24 -0
- package/dist/ledger/conformance.d.ts +83 -0
- package/dist/ledger/conformance.js +259 -0
- package/dist/ledger/emitters.d.ts +76 -0
- package/dist/ledger/emitters.js +188 -0
- package/dist/ledger/index.d.ts +4 -0
- package/dist/ledger/index.js +4 -0
- package/dist/ledger/principal.d.ts +96 -0
- package/dist/ledger/principal.js +121 -0
- package/dist/manifest/externalParticipantSchemas.d.ts +18 -0
- package/dist/manifest/externalParticipantSchemas.js +17 -0
- package/dist/manifest/index.d.ts +1 -0
- package/dist/manifest/index.js +1 -0
- package/dist/manifest/inlineAgentMember.d.ts +2 -0
- package/dist/manifest/inlineAgentMember.js +9 -0
- package/dist/manifest/loadManifest.js +14 -8
- package/dist/manifest/mcpSchemas.d.ts +17 -0
- package/dist/manifest/mcpSchemas.js +41 -0
- package/dist/manifest/memorySchemas.d.ts +245 -0
- package/dist/manifest/memorySchemas.js +148 -0
- package/dist/manifest/renderSpawnfile.js +22 -131
- package/dist/manifest/renderSpawnfileNetworks.js +9 -2
- package/dist/manifest/renderSpawnfileSurfaces.d.ts +2 -0
- package/dist/manifest/renderSpawnfileSurfaces.js +134 -0
- package/dist/manifest/schemas.d.ts +1868 -99
- package/dist/manifest/schemas.js +78 -32
- package/dist/manifest/surfaceSchemas.d.ts +17 -0
- package/dist/manifest/surfaceSchemas.js +24 -1
- package/dist/manifest/teamNetworkAccessSchemas.d.ts +1 -1
- package/dist/manifest/teamNetworkAuthSchemas.d.ts +48 -0
- package/dist/manifest/teamNetworkAuthSchemas.js +103 -0
- package/dist/manifest/teamNetworkSchemas.d.ts +8 -187
- package/dist/manifest/teamNetworkSchemas.js +3 -317
- package/dist/manifest/teamNetworkServerSchemas.d.ts +150 -0
- package/dist/manifest/teamNetworkServerSchemas.js +199 -0
- package/dist/ownership/siblingBuildFreshness.d.ts +20 -0
- package/dist/ownership/siblingBuildFreshness.js +20 -0
- package/dist/ownership/simfileRunOperatorInputs.d.ts +103 -0
- package/dist/ownership/simfileRunOperatorInputs.js +139 -0
- package/dist/report/types.d.ts +142 -0
- package/dist/runtime/common.d.ts +35 -0
- package/dist/runtime/common.js +55 -0
- package/dist/runtime/container.d.ts +28 -1
- package/dist/runtime/container.js +38 -5
- package/dist/runtime/containerPackageOverrides.d.ts +37 -0
- package/dist/runtime/containerPackageOverrides.js +33 -0
- package/dist/runtime/index.d.ts +2 -0
- package/dist/runtime/index.js +2 -0
- package/dist/runtime/mnemeMcp.d.ts +15 -0
- package/dist/runtime/mnemeMcp.js +109 -0
- package/dist/runtime/openclaw/adapter.js +15 -4
- package/dist/runtime/openclaw/mcp.d.ts +10 -0
- package/dist/runtime/openclaw/mcp.js +69 -0
- package/dist/runtime/openclaw/runAuth.js +2 -2
- package/dist/runtime/openclaw/scaffold.js +1 -1
- package/dist/runtime/openclaw/schedules.d.ts +38 -0
- package/dist/runtime/openclaw/schedules.js +74 -0
- package/dist/runtime/pi/adapter.d.ts +1 -1
- package/dist/runtime/pi/adapter.js +86 -53
- package/dist/runtime/pi/appActivitySource.js +114 -2
- package/dist/runtime/pi/appAgentConfig.d.ts +11 -0
- package/dist/runtime/pi/appAgentConfig.js +264 -0
- package/dist/runtime/pi/appCliEnginesSource.d.ts +1 -0
- package/dist/runtime/pi/appCliEnginesSource.js +183 -0
- package/dist/runtime/pi/appCliSource.d.ts +1 -0
- package/dist/runtime/pi/appCliSource.js +353 -0
- package/dist/runtime/pi/appControlSource.d.ts +1 -0
- package/dist/runtime/pi/appControlSource.js +390 -0
- package/dist/runtime/pi/appControlWakeIdentitySource.d.ts +1 -0
- package/dist/runtime/pi/appControlWakeIdentitySource.js +19 -0
- package/dist/runtime/pi/appCoreSource.d.ts +4 -1
- package/dist/runtime/pi/appCoreSource.js +104 -214
- package/dist/runtime/pi/appPreludeSource.js +140 -52
- package/dist/runtime/pi/appScheduleSource.d.ts +1 -0
- package/dist/runtime/pi/appScheduleSource.js +80 -0
- package/dist/runtime/pi/appScriptedEngine.d.ts +31 -0
- package/dist/runtime/pi/appScriptedEngine.js +42 -0
- package/dist/runtime/pi/appSource.d.ts +4 -1
- package/dist/runtime/pi/appSource.js +6 -2
- package/dist/runtime/pi/appTemplate.d.ts +8 -22
- package/dist/runtime/pi/appTemplate.js +9 -126
- package/dist/runtime/pi/appTemplateTypes.d.ts +64 -0
- package/dist/runtime/pi/appTemplateTypes.js +18 -0
- package/dist/runtime/pi/appWakeContextSource.d.ts +1 -0
- package/dist/runtime/pi/appWakeContextSource.js +398 -0
- package/dist/runtime/pi/containerTargets.d.ts +4 -0
- package/dist/runtime/pi/containerTargets.js +57 -0
- package/dist/runtime/pi/runAuth.js +126 -9
- package/dist/runtime/pi/testHelpers.d.ts +2 -0
- package/dist/runtime/pi/testHelpers.js +40 -0
- package/dist/runtime/picoclaw/adapter.js +23 -27
- package/dist/runtime/picoclaw/mcp.d.ts +4 -0
- package/dist/runtime/picoclaw/mcp.js +43 -0
- package/dist/runtime/picoclaw/memory.d.ts +7 -0
- package/dist/runtime/picoclaw/memory.js +17 -0
- package/dist/runtime/picoclaw/runAuth.js +1 -1
- package/dist/runtime/picoclaw/scaffold.js +1 -1
- package/dist/runtime/picoclaw/schedules.d.ts +26 -0
- package/dist/runtime/picoclaw/schedules.js +62 -3
- package/dist/runtime/scheduleUtils.d.ts +2 -0
- package/dist/runtime/scheduleUtils.js +15 -0
- package/dist/runtime/types.d.ts +25 -2
- package/dist/shared/errors.d.ts +1 -1
- package/dist/shared/errors.js +2 -2
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/index.js +1 -0
- package/dist/shared/redaction.d.ts +2 -0
- package/dist/shared/redaction.js +10 -0
- package/dist/status/buildStatus.d.ts +1 -0
- package/dist/status/buildStatus.js +2 -0
- package/dist/status/compileReport.d.ts +22 -0
- package/dist/status/compileReport.js +16 -2
- package/dist/status/compiledProbeCollection.d.ts +21 -0
- package/dist/status/compiledProbeCollection.js +27 -0
- package/dist/status/imageStatusReport.js +6 -0
- package/dist/status/index.d.ts +3 -0
- package/dist/status/index.js +3 -0
- package/dist/status/lifecycleProbes.d.ts +19 -0
- package/dist/status/lifecycleProbes.js +174 -0
- package/dist/status/moltnetProbes.d.ts +7 -8
- package/dist/status/moltnetProbes.js +27 -198
- package/dist/status/moltnetWiringProbes.d.ts +19 -0
- package/dist/status/moltnetWiringProbes.js +178 -0
- package/dist/target/cleanupRun.d.ts +41 -0
- package/dist/target/cleanupRun.js +139 -0
- package/dist/target/cleanupRunDocker.d.ts +16 -0
- package/dist/target/cleanupRunDocker.js +66 -0
- package/dist/target/cleanupRunDocker.test-helper.d.ts +67 -0
- package/dist/target/cleanupRunDocker.test-helper.js +238 -0
- package/dist/target/cleanupRunDockerPreflight.d.ts +17 -0
- package/dist/target/cleanupRunDockerPreflight.js +224 -0
- package/dist/target/composedPreparation.d.ts +205 -0
- package/dist/target/composedPreparation.js +223 -0
- package/dist/target/containerBundle.d.ts +82 -0
- package/dist/target/containerBundle.js +243 -0
- package/dist/target/containerBundleArchive.d.ts +31 -0
- package/dist/target/containerBundleArchive.js +140 -0
- package/dist/target/containerBundleAuthority.d.ts +25 -0
- package/dist/target/containerBundleAuthority.js +65 -0
- package/dist/target/containerBundleContracts.d.ts +114 -0
- package/dist/target/containerBundleContracts.js +173 -0
- package/dist/target/containerBundleFilesystemStore.d.ts +3 -0
- package/dist/target/containerBundleFilesystemStore.js +247 -0
- package/dist/target/containerBundlePolicy.d.ts +33 -0
- package/dist/target/containerBundlePolicy.js +64 -0
- package/dist/target/containerBundleStore.d.ts +127 -0
- package/dist/target/containerBundleStore.js +284 -0
- package/dist/target/contracts.d.ts +538 -0
- package/dist/target/contracts.js +373 -0
- package/dist/target/dockerArtifactIdentityTypes.d.ts +56 -0
- package/dist/target/dockerArtifactIdentityTypes.js +1 -0
- package/dist/target/dockerArtifactInspection.d.ts +40 -0
- package/dist/target/dockerArtifactInspection.js +125 -0
- package/dist/target/dockerArtifacts.d.ts +21 -0
- package/dist/target/dockerArtifacts.js +110 -0
- package/dist/target/dockerArtifactsProvider.d.ts +41 -0
- package/dist/target/dockerArtifactsProvider.js +449 -0
- package/dist/target/dockerCommandExecutor.d.ts +27 -0
- package/dist/target/dockerCommandExecutor.js +200 -0
- package/dist/target/dockerCommandExecutorCore.d.ts +34 -0
- package/dist/target/dockerCommandExecutorCore.js +273 -0
- package/dist/target/dockerContainerBundleBuilder.d.ts +8 -0
- package/dist/target/dockerContainerBundleBuilder.js +256 -0
- package/dist/target/dockerContextSnapshot.d.ts +21 -0
- package/dist/target/dockerContextSnapshot.js +158 -0
- package/dist/target/dockerEndpointFingerprint.d.ts +1 -0
- package/dist/target/dockerEndpointFingerprint.js +9 -0
- package/dist/target/dockerPreparedArtifact.d.ts +48 -0
- package/dist/target/dockerPreparedArtifact.js +131 -0
- package/dist/target/dockerProjectionJson.d.ts +1 -0
- package/dist/target/dockerProjectionJson.js +80 -0
- package/dist/target/dockerPublicArtifactSnapshot.d.ts +17 -0
- package/dist/target/dockerPublicArtifactSnapshot.js +99 -0
- package/dist/target/dockerResources.d.ts +26 -0
- package/dist/target/dockerResources.js +162 -0
- package/dist/target/dockerResourcesProvider.d.ts +44 -0
- package/dist/target/dockerResourcesProvider.js +207 -0
- package/dist/target/dockerSecrets.d.ts +39 -0
- package/dist/target/dockerSecrets.js +249 -0
- package/dist/target/dockerSecretsAuthority.d.ts +26 -0
- package/dist/target/dockerSecretsAuthority.js +216 -0
- package/dist/target/dockerSecretsLifecycle.d.ts +25 -0
- package/dist/target/dockerSecretsLifecycle.js +133 -0
- package/dist/target/dockerSecretsProvider.d.ts +68 -0
- package/dist/target/dockerSecretsProvider.js +329 -0
- package/dist/target/dockerTarget.d.ts +52 -0
- package/dist/target/dockerTarget.js +48 -0
- package/dist/target/dockerTargetBinding.d.ts +14 -0
- package/dist/target/dockerTargetBinding.js +96 -0
- package/dist/target/dockerWorldClock.d.ts +17 -0
- package/dist/target/dockerWorldClock.js +111 -0
- package/dist/target/dockerWorldReadiness.d.ts +17 -0
- package/dist/target/dockerWorldReadiness.js +119 -0
- package/dist/target/dockerWorldService.d.ts +23 -0
- package/dist/target/dockerWorldService.js +216 -0
- package/dist/target/dockerWorldServiceAuthority.d.ts +80 -0
- package/dist/target/dockerWorldServiceAuthority.js +182 -0
- package/dist/target/dockerWorldServiceLifecycle.d.ts +41 -0
- package/dist/target/dockerWorldServiceLifecycle.js +275 -0
- package/dist/target/dockerWorldServiceProvider.d.ts +60 -0
- package/dist/target/dockerWorldServiceProvider.js +318 -0
- package/dist/target/dockerWorldServiceStore.d.ts +73 -0
- package/dist/target/dockerWorldServiceStore.js +367 -0
- package/dist/target/evidenceExport.d.ts +55 -0
- package/dist/target/evidenceExport.js +518 -0
- package/dist/target/evidenceExportArchive.d.ts +10 -0
- package/dist/target/evidenceExportArchive.js +302 -0
- package/dist/target/evidenceExportContract.d.ts +27 -0
- package/dist/target/evidenceExportContract.js +40 -0
- package/dist/target/evidenceExportOperationsTestKit.d.ts +87 -0
- package/dist/target/evidenceExportOperationsTestKit.js +312 -0
- package/dist/target/evidenceExportProvider.d.ts +85 -0
- package/dist/target/evidenceExportProvider.js +187 -0
- package/dist/target/evidenceExportPublicationTypes.d.ts +16 -0
- package/dist/target/evidenceExportPublicationTypes.js +1 -0
- package/dist/target/evidenceExportStore.d.ts +70 -0
- package/dist/target/evidenceExportStore.js +498 -0
- package/dist/target/evidenceExportStorePublication.d.ts +7 -0
- package/dist/target/evidenceExportStorePublication.js +395 -0
- package/dist/target/handles.d.ts +20 -0
- package/dist/target/handles.js +56 -0
- package/dist/target/index.d.ts +12 -0
- package/dist/target/index.js +11 -0
- package/dist/target/journal.d.ts +59 -0
- package/dist/target/journal.js +529 -0
- package/dist/target/journalFilesystem.d.ts +3 -0
- package/dist/target/journalFilesystem.js +111 -0
- package/dist/target/journalRoot.d.ts +4 -0
- package/dist/target/journalRoot.js +6 -0
- package/dist/target/organizationAttachment.d.ts +23 -0
- package/dist/target/organizationAttachment.js +263 -0
- package/dist/target/organizationAttachmentAuthority.d.ts +65 -0
- package/dist/target/organizationAttachmentAuthority.js +161 -0
- package/dist/target/organizationAttachmentLifecycle.d.ts +17 -0
- package/dist/target/organizationAttachmentLifecycle.js +101 -0
- package/dist/target/organizationAttachmentProvider.d.ts +76 -0
- package/dist/target/organizationAttachmentProvider.js +289 -0
- package/dist/target/organizationAttachmentStore.d.ts +51 -0
- package/dist/target/organizationAttachmentStore.js +316 -0
- package/dist/target/publicArtifactSnapshot.d.ts +41 -0
- package/dist/target/publicArtifactSnapshot.js +150 -0
- package/dist/target/topologyActivation.d.ts +51 -0
- package/dist/target/topologyActivation.js +149 -0
- package/dist/target/topologyAttestation.d.ts +37 -0
- package/dist/target/topologyAttestation.js +300 -0
- package/dist/target/topologyAttestationErrors.d.ts +1 -0
- package/dist/target/topologyAttestationErrors.js +1 -0
- package/dist/target/worldClock.d.ts +60 -0
- package/dist/target/worldClock.js +129 -0
- package/dist/target/worldReadiness.d.ts +103 -0
- package/dist/target/worldReadiness.js +153 -0
- package/moltnet-releases.json +20 -0
- package/package.json +27 -11
- package/runtimes.yaml +8 -23
- package/dist/runtime/openclaw/scaffold-assets/CLAUDE.md +0 -5
- package/dist/runtime/picoclaw/scaffold-assets/CLAUDE.md +0 -5
- /package/dist/runtime/openclaw/scaffold-assets/{AGENTS.md → WORKSPACE_AGENTS.md} +0 -0
- /package/dist/runtime/picoclaw/scaffold-assets/{AGENTS.md → WORKSPACE_AGENTS.md} +0 -0
|
@@ -14,6 +14,11 @@ export interface UpProjectOptions extends CompileProjectOptions {
|
|
|
14
14
|
envFilePath?: string;
|
|
15
15
|
imageTag?: string;
|
|
16
16
|
runRunner?: DockerRunRunner;
|
|
17
|
+
networkAttachmentHandle?: string;
|
|
18
|
+
organizationHandoffRunId?: string;
|
|
19
|
+
descriptorDigest?: string;
|
|
20
|
+
selectedTargetReceipt?: unknown;
|
|
21
|
+
selectedTargetReceiptDigest?: string;
|
|
17
22
|
targetExecFile?: DockerTargetExecFile;
|
|
18
23
|
}
|
|
19
24
|
export interface UpProjectResult extends BuildProjectResult {
|
|
@@ -1,11 +1,110 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
import { rm } from "node:fs/promises";
|
|
4
|
+
import { createOrganizationReadinessPending, createDockerOrganizationHandoffSession, createDockerDeploymentRecord, initializeOrganizationHandoffAuthorityStore, parseCanonicalSha256Digest, probeDockerOrganizationReadiness, readDeploymentRecord, resolveDockerDeploymentTarget, resolveDeploymentRecordPath, writeDeploymentRecord, writeDockerDeploymentRecordForRun } from "../deployment/index.js";
|
|
5
|
+
import { createCanonicalSelectedTargetReceiptBytes, parseOpaqueTargetHandle, parseRunId, parseSelectedTargetReceipt, selectTarget } from "../target/index.js";
|
|
4
6
|
import { buildProject } from "./buildProject.js";
|
|
5
7
|
import { createDockerRunInvocation, resolveDetachedDeploymentOptions, runDockerContainer } from "./runProject.js";
|
|
8
|
+
import { executeDockerRunWithSupportCleanup } from "./runProjectLifecycle.js";
|
|
6
9
|
import { requireAuthProfile } from "../auth/index.js";
|
|
7
|
-
import { DEFAULT_OUTPUT_DIRECTORY } from "../shared/index.js";
|
|
10
|
+
import { DEFAULT_OUTPUT_DIRECTORY, SpawnfileError } from "../shared/index.js";
|
|
11
|
+
import { ensureNoopolisRunId, resolveNoopolisRunId } from "../runtime/index.js";
|
|
12
|
+
import { fileExists } from "../filesystem/index.js";
|
|
13
|
+
import { resolveHostCliCredential } from "./runProjectAuth.js";
|
|
14
|
+
const handoffInputError = () => new SpawnfileError("validation_error", "Organization handoff requires authorized run id, selected target receipt, descriptor digest, selected target receipt digest, network attachment handle, and world bindings");
|
|
15
|
+
const handoffRecoveryIncompleteError = () => new SpawnfileError("runtime_error", "Organization handoff recovery is incomplete; redeploy with explicit authorization");
|
|
16
|
+
const stableRecord = (record) => {
|
|
17
|
+
const { created_at: _createdAt, export_index: _exportIndex, organization_ready: _organizationReady, ...stable } = record;
|
|
18
|
+
return stable;
|
|
19
|
+
};
|
|
20
|
+
const canonicalJson = (value) => {
|
|
21
|
+
if (Array.isArray(value))
|
|
22
|
+
return `[${value.map(canonicalJson).join(",")}]`;
|
|
23
|
+
if (value !== null && typeof value === "object") {
|
|
24
|
+
const record = value;
|
|
25
|
+
return `{${Object.keys(record).sort().map((key) => `${JSON.stringify(key)}:${canonicalJson(record[key])}`).join(",")}}`;
|
|
26
|
+
}
|
|
27
|
+
const serialized = JSON.stringify(value);
|
|
28
|
+
if (serialized === undefined)
|
|
29
|
+
throw handoffInputError();
|
|
30
|
+
return serialized;
|
|
31
|
+
};
|
|
32
|
+
const resolveRequestedHandoff = (options) => {
|
|
33
|
+
const values = [
|
|
34
|
+
options.descriptorDigest,
|
|
35
|
+
options.organizationHandoffRunId,
|
|
36
|
+
options.selectedTargetReceiptDigest,
|
|
37
|
+
options.selectedTargetReceipt,
|
|
38
|
+
options.networkAttachmentHandle,
|
|
39
|
+
options.worldBindingsPath
|
|
40
|
+
];
|
|
41
|
+
if (values.every((value) => value === undefined))
|
|
42
|
+
return null;
|
|
43
|
+
if (values.some((value) => value === undefined) || !options.detach)
|
|
44
|
+
throw handoffInputError();
|
|
45
|
+
try {
|
|
46
|
+
const selectedTarget = parseSelectedTargetReceipt(options.selectedTargetReceipt);
|
|
47
|
+
const selectedDigest = parseCanonicalSha256Digest(options.selectedTargetReceiptDigest, "selected_target_receipt_digest");
|
|
48
|
+
const computedDigest = `sha256:${createHash("sha256").update(createCanonicalSelectedTargetReceiptBytes(selectedTarget), "utf8").digest("hex")}`;
|
|
49
|
+
if (selectedDigest !== computedDigest)
|
|
50
|
+
throw new Error("selected receipt digest mismatch");
|
|
51
|
+
return {
|
|
52
|
+
descriptorDigest: parseCanonicalSha256Digest(options.descriptorDigest, "descriptor_digest"),
|
|
53
|
+
runId: parseRunId(options.organizationHandoffRunId),
|
|
54
|
+
networkAttachmentHandle: parseOpaqueTargetHandle(options.networkAttachmentHandle),
|
|
55
|
+
selectedTarget,
|
|
56
|
+
selectedTargetReceiptDigest: selectedDigest
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
throw handoffInputError();
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
const verifyRequestedHandoffTarget = async (requested, resolved, options) => {
|
|
64
|
+
if (!requested)
|
|
65
|
+
return;
|
|
66
|
+
if (typeof resolved.dockerContext !== "string" || resolved.dockerContext.length === 0
|
|
67
|
+
|| resolved.dockerHost != null || process.env.DOCKER_HOST != null)
|
|
68
|
+
throw handoffInputError();
|
|
69
|
+
try {
|
|
70
|
+
const actual = await selectTarget({
|
|
71
|
+
context: resolved.dockerContext,
|
|
72
|
+
dockerCommand: options.dockerCommand,
|
|
73
|
+
execFile: options.targetExecFile
|
|
74
|
+
});
|
|
75
|
+
if (createCanonicalSelectedTargetReceiptBytes(actual)
|
|
76
|
+
!== createCanonicalSelectedTargetReceiptBytes(requested.selectedTarget))
|
|
77
|
+
throw new Error("target mismatch");
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
throw handoffInputError();
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
const resolveCompiledHandoff = (requested, buildResult) => {
|
|
84
|
+
if (!requested)
|
|
85
|
+
return undefined;
|
|
86
|
+
try {
|
|
87
|
+
const bindingDigest = buildResult.organizationReadinessEvidence.worldBindings?.digest;
|
|
88
|
+
if (!bindingDigest)
|
|
89
|
+
throw new Error("missing compiled binding evidence");
|
|
90
|
+
const bindingDigestParsed = parseCanonicalSha256Digest(bindingDigest, "binding_digest");
|
|
91
|
+
return { authority: { ...requested, bindingDigest: bindingDigestParsed }, organizationHandoff: {
|
|
92
|
+
bindingDigest: bindingDigestParsed, networkAttachmentHandle: requested.networkAttachmentHandle,
|
|
93
|
+
selectedTargetReceiptDigest: requested.selectedTargetReceiptDigest
|
|
94
|
+
} };
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
throw handoffInputError();
|
|
98
|
+
}
|
|
99
|
+
};
|
|
8
100
|
export const upProject = async (inputPath, options = {}) => {
|
|
101
|
+
// Parse caller authority before any target or build work. Target identity is
|
|
102
|
+
// verified below from the resolved detached options, including exact record reuse.
|
|
103
|
+
const requestedHandoff = resolveRequestedHandoff(options);
|
|
104
|
+
// Handoff reservation identity must survive a process crash. Unlike an
|
|
105
|
+
// ordinary deployment run, it may never silently mint a fresh run id.
|
|
106
|
+
if (requestedHandoff && resolveNoopolisRunId(process.env) !== requestedHandoff.runId)
|
|
107
|
+
throw handoffInputError();
|
|
9
108
|
const resolvedOptions = await resolveDetachedDeploymentOptions(path.resolve(options.outputDirectory ?? DEFAULT_OUTPUT_DIRECTORY), {
|
|
10
109
|
authProfile: options.authProfile,
|
|
11
110
|
containerName: options.containerName,
|
|
@@ -18,20 +117,37 @@ export const upProject = async (inputPath, options = {}) => {
|
|
|
18
117
|
imageTag: options.imageTag,
|
|
19
118
|
targetExecFile: options.targetExecFile
|
|
20
119
|
});
|
|
120
|
+
await verifyRequestedHandoffTarget(requestedHandoff, resolvedOptions, options);
|
|
121
|
+
// Every authority container compiled for this deployment must stamp
|
|
122
|
+
// causal events under the same real run id (see specs/CAUSAL.md).
|
|
123
|
+
// buildProject/compileProject stay deterministic functions of the host
|
|
124
|
+
// env; this only fills in a generated id when the host did not already
|
|
125
|
+
// provide one, before the build step that bakes it into the
|
|
126
|
+
// entrypoint/recipe env.
|
|
127
|
+
if (!requestedHandoff)
|
|
128
|
+
ensureNoopolisRunId();
|
|
21
129
|
const buildResult = await buildProject(inputPath, {
|
|
22
130
|
buildRunner: options.buildRunner,
|
|
23
131
|
clean: options.clean,
|
|
132
|
+
containerArchitecture: options.containerArchitecture,
|
|
24
133
|
dockerContext: resolvedOptions.dockerContext,
|
|
25
134
|
dockerCommand: options.dockerCommand,
|
|
26
135
|
imageTag: resolvedOptions.imageTag,
|
|
27
|
-
outputDirectory: options.outputDirectory
|
|
136
|
+
outputDirectory: options.outputDirectory,
|
|
137
|
+
runtimePackageOverrides: options.runtimePackageOverrides,
|
|
138
|
+
...(options.worldBindingsPath !== undefined
|
|
139
|
+
? { worldBindingsPath: options.worldBindingsPath }
|
|
140
|
+
: {})
|
|
28
141
|
});
|
|
142
|
+
const handoff = resolveCompiledHandoff(requestedHandoff, buildResult);
|
|
29
143
|
const authProfile = resolvedOptions.authProfile
|
|
30
144
|
? await requireAuthProfile(resolvedOptions.authProfile)
|
|
31
145
|
: null;
|
|
146
|
+
const cliCredential = await resolveHostCliCredential(buildResult.report.container);
|
|
32
147
|
const imageTag = resolvedOptions.imageTag ?? buildResult.imageTag;
|
|
33
148
|
const invocation = await createDockerRunInvocation(buildResult, imageTag, {
|
|
34
149
|
authProfile,
|
|
150
|
+
...(cliCredential ? { cliCredential: { name: cliCredential.name, value: cliCredential.value } } : {}),
|
|
35
151
|
containerName: resolvedOptions.containerName,
|
|
36
152
|
detach: options.detach,
|
|
37
153
|
deploymentName: resolvedOptions.deploymentName,
|
|
@@ -40,27 +156,147 @@ export const upProject = async (inputPath, options = {}) => {
|
|
|
40
156
|
dockerHost: resolvedOptions.dockerHost,
|
|
41
157
|
envFilePath: resolvedOptions.envFilePath
|
|
42
158
|
});
|
|
43
|
-
let
|
|
159
|
+
let authority;
|
|
160
|
+
let deploymentRecordPath;
|
|
161
|
+
let recovered = false;
|
|
162
|
+
let dockerLifecycleInvoked = false;
|
|
44
163
|
try {
|
|
45
|
-
|
|
164
|
+
let pending;
|
|
165
|
+
if (handoff) {
|
|
166
|
+
if (!invocation.deploymentLabels || !invocation.containerName)
|
|
167
|
+
throw handoffInputError();
|
|
168
|
+
const session = createDockerOrganizationHandoffSession({
|
|
169
|
+
bindingDigest: handoff.authority.bindingDigest,
|
|
170
|
+
containerName: invocation.containerName,
|
|
171
|
+
deploymentLabels: invocation.deploymentLabels,
|
|
172
|
+
descriptorDigest: handoff.authority.descriptorDigest,
|
|
173
|
+
organizationHandoff: handoff.organizationHandoff,
|
|
174
|
+
runId: handoff.authority.runId,
|
|
175
|
+
selectedTarget: handoff.authority.selectedTarget,
|
|
176
|
+
selectedTargetReceiptDigest: handoff.authority.selectedTargetReceiptDigest
|
|
177
|
+
});
|
|
178
|
+
authority = await initializeOrganizationHandoffAuthorityStore();
|
|
179
|
+
const begun = await authority.begin(session.authorityInput);
|
|
180
|
+
pending = begun.pending;
|
|
181
|
+
recovered = !begun.created;
|
|
182
|
+
}
|
|
183
|
+
let runMetadata = undefined;
|
|
184
|
+
if (!recovered) {
|
|
185
|
+
dockerLifecycleInvoked = true;
|
|
186
|
+
runMetadata = await executeDockerRunWithSupportCleanup(invocation, options.runRunner ?? runDockerContainer);
|
|
187
|
+
}
|
|
188
|
+
const observed = recovered && authority && pending
|
|
189
|
+
? await authority.readDockerMutation(pending.pending_key)
|
|
190
|
+
: undefined;
|
|
191
|
+
if (recovered && !observed)
|
|
192
|
+
throw handoffRecoveryIncompleteError();
|
|
193
|
+
const recoveredMetadata = observed
|
|
194
|
+
? { containerId: observed.container_id, deploymentLabels: observed.deployment_labels, imageId: observed.image_id }
|
|
195
|
+
: undefined;
|
|
196
|
+
const exactRunMetadata = runMetadata ?? recoveredMetadata;
|
|
197
|
+
let organizationHandoffHandle;
|
|
198
|
+
if (handoff) {
|
|
199
|
+
if (!exactRunMetadata?.containerId || !exactRunMetadata.deploymentLabels || !exactRunMetadata.imageId || !authority || !pending)
|
|
200
|
+
throw handoffInputError();
|
|
201
|
+
if (!recovered)
|
|
202
|
+
await authority.observeDockerMutation(pending.pending_key, {
|
|
203
|
+
containerId: exactRunMetadata.containerId, deploymentLabels: exactRunMetadata.deploymentLabels, imageId: exactRunMetadata.imageId
|
|
204
|
+
});
|
|
205
|
+
const finalized = await authority.finalize(pending.pending_key, { containerId: exactRunMetadata.containerId, deploymentLabels: exactRunMetadata.deploymentLabels });
|
|
206
|
+
organizationHandoffHandle = finalized.organization_handoff_handle;
|
|
207
|
+
const existingRecordPath = invocation.detach && invocation.deploymentName
|
|
208
|
+
? resolveDeploymentRecordPath(buildResult.outputDirectory, invocation.deploymentName)
|
|
209
|
+
: null;
|
|
210
|
+
if (existingRecordPath && await fileExists(existingRecordPath)) {
|
|
211
|
+
const existing = await readDeploymentRecord(existingRecordPath);
|
|
212
|
+
const target = await resolveDockerDeploymentTarget({
|
|
213
|
+
context: invocation.dockerContext ?? undefined,
|
|
214
|
+
dockerCommand: invocation.command,
|
|
215
|
+
dockerHost: invocation.dockerHost ?? undefined,
|
|
216
|
+
execFile: options.targetExecFile
|
|
217
|
+
});
|
|
218
|
+
const expected = createDockerDeploymentRecord({
|
|
219
|
+
authProfileName: authProfile?.name ?? null,
|
|
220
|
+
compileFingerprint: buildResult.report.compile_fingerprint ?? "",
|
|
221
|
+
containerName: invocation.containerName,
|
|
222
|
+
deploymentName: invocation.deploymentName ?? undefined,
|
|
223
|
+
envFilePath: resolvedOptions.envFilePath,
|
|
224
|
+
imageTag,
|
|
225
|
+
networkIds: buildResult.report.container?.moltnet?.server_plans
|
|
226
|
+
.filter((server) => server.mode === "managed").map((server) => server.network_id),
|
|
227
|
+
nodes: buildResult.report.nodes,
|
|
228
|
+
organizationHandoff: handoff.organizationHandoff,
|
|
229
|
+
organizationHandoffHandle,
|
|
230
|
+
outputDirectory: buildResult.outputDirectory,
|
|
231
|
+
projectRoot: buildResult.report.root,
|
|
232
|
+
runId: handoff.authority.runId,
|
|
233
|
+
runMetadata: exactRunMetadata,
|
|
234
|
+
runtimeInstanceIds: buildResult.report.container?.runtime_instances.map((instance) => instance.id) ?? [],
|
|
235
|
+
target
|
|
236
|
+
});
|
|
237
|
+
if (canonicalJson(stableRecord(existing)) !== canonicalJson(stableRecord(expected)))
|
|
238
|
+
throw handoffInputError();
|
|
239
|
+
deploymentRecordPath = existingRecordPath;
|
|
240
|
+
}
|
|
241
|
+
else
|
|
242
|
+
deploymentRecordPath = invocation.detach && invocation.deploymentName
|
|
243
|
+
? await writeDockerDeploymentRecordForRun({ authProfileName: authProfile?.name ?? null, envFilePath: resolvedOptions.envFilePath,
|
|
244
|
+
imageTag, invocation, outputDirectory: buildResult.outputDirectory,
|
|
245
|
+
organizationHandoff: handoff.organizationHandoff, organizationHandoffHandle, report: buildResult.report,
|
|
246
|
+
runMetadata: exactRunMetadata, targetExecFile: options.targetExecFile })
|
|
247
|
+
: null;
|
|
248
|
+
}
|
|
249
|
+
else
|
|
250
|
+
deploymentRecordPath = invocation.detach && invocation.deploymentName
|
|
251
|
+
? await writeDockerDeploymentRecordForRun({ authProfileName: authProfile?.name ?? null, envFilePath: resolvedOptions.envFilePath,
|
|
252
|
+
imageTag, invocation, outputDirectory: buildResult.outputDirectory, report: buildResult.report,
|
|
253
|
+
runMetadata: runMetadata ?? undefined, targetExecFile: options.targetExecFile })
|
|
254
|
+
: null;
|
|
46
255
|
}
|
|
47
256
|
finally {
|
|
48
|
-
|
|
49
|
-
|
|
257
|
+
// Replay creates a fresh support directory but does not invoke the normal
|
|
258
|
+
// Docker lifecycle wrapper. Preserve its detached credential cleanup
|
|
259
|
+
// semantics without deleting bind-mount support files.
|
|
260
|
+
let cleanupError;
|
|
261
|
+
try {
|
|
262
|
+
if (invocation.detach && !dockerLifecycleInvoked)
|
|
263
|
+
await rm(invocation.envFilePath, { force: true });
|
|
50
264
|
}
|
|
265
|
+
catch (error) {
|
|
266
|
+
cleanupError = error;
|
|
267
|
+
}
|
|
268
|
+
try {
|
|
269
|
+
await authority?.dispose();
|
|
270
|
+
}
|
|
271
|
+
catch (error) {
|
|
272
|
+
if (cleanupError === undefined)
|
|
273
|
+
throw error;
|
|
274
|
+
}
|
|
275
|
+
if (cleanupError !== undefined)
|
|
276
|
+
throw cleanupError;
|
|
277
|
+
}
|
|
278
|
+
if (deploymentRecordPath && buildResult.organizationReadinessEvidence) {
|
|
279
|
+
const record = await readDeploymentRecord(deploymentRecordPath);
|
|
280
|
+
const pending = createOrganizationReadinessPending(buildResult.organizationReadinessEvidence, {
|
|
281
|
+
compileFingerprint: record.compile_fingerprint,
|
|
282
|
+
deploymentName: record.name,
|
|
283
|
+
runId: record.run_id ?? null,
|
|
284
|
+
unitCount: record.units.length,
|
|
285
|
+
unitId: record.units[0]?.id ?? "invalid-unit"
|
|
286
|
+
});
|
|
287
|
+
const pendingRecord = { ...record, organization_ready: pending };
|
|
288
|
+
await writeDeploymentRecord(buildResult.outputDirectory, pendingRecord);
|
|
289
|
+
const organizationReady = await probeDockerOrganizationReadiness({
|
|
290
|
+
dockerCommand: options.dockerCommand,
|
|
291
|
+
evidence: buildResult.organizationReadinessEvidence,
|
|
292
|
+
execFile: options.targetExecFile,
|
|
293
|
+
record: pendingRecord
|
|
294
|
+
});
|
|
295
|
+
await writeDeploymentRecord(buildResult.outputDirectory, {
|
|
296
|
+
...pendingRecord,
|
|
297
|
+
organization_ready: organizationReady
|
|
298
|
+
});
|
|
51
299
|
}
|
|
52
|
-
const deploymentRecordPath = invocation.detach && invocation.deploymentName
|
|
53
|
-
? await writeDockerDeploymentRecordForRun({
|
|
54
|
-
authProfileName: authProfile?.name ?? null,
|
|
55
|
-
envFilePath: resolvedOptions.envFilePath,
|
|
56
|
-
imageTag,
|
|
57
|
-
invocation,
|
|
58
|
-
outputDirectory: buildResult.outputDirectory,
|
|
59
|
-
report: buildResult.report,
|
|
60
|
-
runMetadata: runMetadata ?? undefined,
|
|
61
|
-
targetExecFile: options.targetExecFile
|
|
62
|
-
})
|
|
63
|
-
: null;
|
|
64
300
|
return {
|
|
65
301
|
...buildResult,
|
|
66
302
|
authProfileName: authProfile?.name ?? null,
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type CompiledEngineEntry, type CompiledScheduleEntry, type UpReceipt } from "../deployment/index.js";
|
|
2
|
+
import type { CompilePlan } from "./types.js";
|
|
3
|
+
import type { UpProjectResult } from "./upProject.js";
|
|
4
|
+
/**
|
|
5
|
+
* Extracts the `{agent, cron}` pairs an up-receipt's `compiled_schedule` field carries
|
|
6
|
+
* (Decision 21 Piece 4) — the raw material for simfile's wake-diff denominator oracle.
|
|
7
|
+
* Only `kind: "cron"` schedules are represented; `every`/`disabled` schedules have no
|
|
8
|
+
* cron-fire cadence to diff against sim-time and are intentionally omitted, not zeroed.
|
|
9
|
+
*/
|
|
10
|
+
export declare const resolveCompiledSchedule: (plan: CompilePlan) => CompiledScheduleEntry[];
|
|
11
|
+
/**
|
|
12
|
+
* Extracts `{agent, engine}` pairs (Piece 5, Slice B) — disclosure ground truth for the
|
|
13
|
+
* run-manifest's `pinned-engine` field, so a `scripted` (or any non-default) pi engine is
|
|
14
|
+
* visibly disclosed rather than an invisible test-only branch. Reads
|
|
15
|
+
* `report.container.runtime_instances[].engine_by_node_id`, the single source of truth
|
|
16
|
+
* `containerArtifacts.ts` already stamps from the pi adapter's own resolved engine kinds
|
|
17
|
+
* (see `src/runtime/pi/adapter.ts`'s `createContainerTargets`) — deliberately not
|
|
18
|
+
* re-derived from a fresh `buildCompilePlan` walk (unlike `resolveCompiledSchedule` above),
|
|
19
|
+
* since that would recompute the exact same fact from pi-adapter-internal logic
|
|
20
|
+
* (`resolvePiEngine`) that compiler code has no business reaching into directly.
|
|
21
|
+
*/
|
|
22
|
+
export declare const resolveCompiledEngines: (report: UpProjectResult["report"]) => CompiledEngineEntry[];
|
|
23
|
+
/**
|
|
24
|
+
* Builds `spawnfile.up-receipt.v1` from a project-path `upProject()` result. Reads back
|
|
25
|
+
* the deployment record `upProject` already wrote (for `run_id`/deployment name/container
|
|
26
|
+
* id — the same record `spawnfile artifacts export`/`spawnfile down` resolve), and
|
|
27
|
+
* re-derives `compiled_schedule` from the resolved graph, since `compileProject` does not
|
|
28
|
+
* retain its own `CompilePlan` past the compile step.
|
|
29
|
+
*
|
|
30
|
+
* `readiness` reuses whatever signal `upProject` already has — a bare `docker run -d`
|
|
31
|
+
* that returned a container id, not a new health probe: `up` has never polled
|
|
32
|
+
* application-level readiness, and this receipt does not invent one. `moltnet_base_url`
|
|
33
|
+
* comes straight from the compiled container report's own managed/external server plan;
|
|
34
|
+
* no credentials ever land on this contract (contracts.md).
|
|
35
|
+
*/
|
|
36
|
+
export declare const buildUpReceipt: (inputPath: string, result: UpProjectResult) => Promise<UpReceipt>;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { readDeploymentRecord, UP_RECEIPT_VERSION } from "../deployment/index.js";
|
|
2
|
+
import { SpawnfileError } from "../shared/index.js";
|
|
3
|
+
import { buildCompilePlan } from "./buildCompilePlan.js";
|
|
4
|
+
/**
|
|
5
|
+
* Extracts the `{agent, cron}` pairs an up-receipt's `compiled_schedule` field carries
|
|
6
|
+
* (Decision 21 Piece 4) — the raw material for simfile's wake-diff denominator oracle.
|
|
7
|
+
* Only `kind: "cron"` schedules are represented; `every`/`disabled` schedules have no
|
|
8
|
+
* cron-fire cadence to diff against sim-time and are intentionally omitted, not zeroed.
|
|
9
|
+
*/
|
|
10
|
+
export const resolveCompiledSchedule = (plan) => plan.nodes
|
|
11
|
+
.filter((node) => node.kind === "agent")
|
|
12
|
+
.flatMap((node) => {
|
|
13
|
+
const schedule = node.value.schedule;
|
|
14
|
+
return schedule?.kind === "cron" ? [{ agent: node.id, cron: schedule.cron }] : [];
|
|
15
|
+
})
|
|
16
|
+
.sort((left, right) => left.agent.localeCompare(right.agent));
|
|
17
|
+
/**
|
|
18
|
+
* Extracts `{agent, engine}` pairs (Piece 5, Slice B) — disclosure ground truth for the
|
|
19
|
+
* run-manifest's `pinned-engine` field, so a `scripted` (or any non-default) pi engine is
|
|
20
|
+
* visibly disclosed rather than an invisible test-only branch. Reads
|
|
21
|
+
* `report.container.runtime_instances[].engine_by_node_id`, the single source of truth
|
|
22
|
+
* `containerArtifacts.ts` already stamps from the pi adapter's own resolved engine kinds
|
|
23
|
+
* (see `src/runtime/pi/adapter.ts`'s `createContainerTargets`) — deliberately not
|
|
24
|
+
* re-derived from a fresh `buildCompilePlan` walk (unlike `resolveCompiledSchedule` above),
|
|
25
|
+
* since that would recompute the exact same fact from pi-adapter-internal logic
|
|
26
|
+
* (`resolvePiEngine`) that compiler code has no business reaching into directly.
|
|
27
|
+
*/
|
|
28
|
+
export const resolveCompiledEngines = (report) => (report.container?.runtime_instances ?? [])
|
|
29
|
+
.flatMap((instance) => Object.entries(instance.engine_by_node_id ?? {}))
|
|
30
|
+
.map(([agent, engine]) => ({ agent, engine }))
|
|
31
|
+
.sort((left, right) => left.agent.localeCompare(right.agent));
|
|
32
|
+
/**
|
|
33
|
+
* Builds `spawnfile.up-receipt.v1` from a project-path `upProject()` result. Reads back
|
|
34
|
+
* the deployment record `upProject` already wrote (for `run_id`/deployment name/container
|
|
35
|
+
* id — the same record `spawnfile artifacts export`/`spawnfile down` resolve), and
|
|
36
|
+
* re-derives `compiled_schedule` from the resolved graph, since `compileProject` does not
|
|
37
|
+
* retain its own `CompilePlan` past the compile step.
|
|
38
|
+
*
|
|
39
|
+
* `readiness` reuses whatever signal `upProject` already has — a bare `docker run -d`
|
|
40
|
+
* that returned a container id, not a new health probe: `up` has never polled
|
|
41
|
+
* application-level readiness, and this receipt does not invent one. `moltnet_base_url`
|
|
42
|
+
* comes straight from the compiled container report's own managed/external server plan;
|
|
43
|
+
* no credentials ever land on this contract (contracts.md).
|
|
44
|
+
*/
|
|
45
|
+
export const buildUpReceipt = async (inputPath, result) => {
|
|
46
|
+
const plan = await buildCompilePlan(inputPath);
|
|
47
|
+
const compiledSchedule = resolveCompiledSchedule(plan);
|
|
48
|
+
const compiledEngines = resolveCompiledEngines(result.report);
|
|
49
|
+
const record = result.deploymentRecordPath
|
|
50
|
+
? await readDeploymentRecord(result.deploymentRecordPath)
|
|
51
|
+
: null;
|
|
52
|
+
const unit = record?.units[0] ?? null;
|
|
53
|
+
const containerIds = unit?.container_id ? [unit.container_id] : [];
|
|
54
|
+
const fingerprint = result.report.compile_fingerprint;
|
|
55
|
+
if (!fingerprint) {
|
|
56
|
+
throw new SpawnfileError("runtime_error", "Compiled output has no compile_fingerprint; cannot build an up-receipt");
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
version: UP_RECEIPT_VERSION,
|
|
60
|
+
run_id: record?.run_id ?? null,
|
|
61
|
+
fingerprint,
|
|
62
|
+
deployment: {
|
|
63
|
+
name: record?.name ?? null,
|
|
64
|
+
container_ids: containerIds
|
|
65
|
+
},
|
|
66
|
+
readiness: {
|
|
67
|
+
state: containerIds.length > 0 ? "running" : "unknown",
|
|
68
|
+
moltnet_base_url: result.report.container?.moltnet?.server_plans?.[0]?.base_url ?? null
|
|
69
|
+
},
|
|
70
|
+
compiled_schedule: compiledSchedule,
|
|
71
|
+
engines: compiledEngines,
|
|
72
|
+
...(result.report.container?.moltnet?.release
|
|
73
|
+
? { moltnet_release: {
|
|
74
|
+
...result.report.container.moltnet.release,
|
|
75
|
+
capabilities: ["pi-bridge"]
|
|
76
|
+
} }
|
|
77
|
+
: {}),
|
|
78
|
+
...(record?.organization_handoff ? { organization_handoff: record.organization_handoff } : {}),
|
|
79
|
+
...(record?.organization_handoff_handle ? { organization_handoff_handle: record.organization_handoff_handle } : {}),
|
|
80
|
+
...(record?.organization_ready ? { organization_ready: record.organization_ready } : {})
|
|
81
|
+
};
|
|
82
|
+
};
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
|
-
import {
|
|
2
|
+
import { getManifestPath, writeUtf8File } from "../filesystem/index.js";
|
|
3
3
|
import { loadManifest, renderSpawnfile } from "../manifest/index.js";
|
|
4
4
|
import { SpawnfileError } from "../shared/index.js";
|
|
5
5
|
import { resolveEffectiveModelTarget } from "./modelEnv.js";
|
|
6
|
+
import { collectProjectManifestPaths, createInlineAgentSource, rewriteInlineAgentMembers } from "./projectManifestGraph.js";
|
|
6
7
|
const TEAM_MODEL_COMMAND_ERROR = "spawnfile model commands only write agent manifests; use --recursive to update descendant agents of a team project";
|
|
7
8
|
const AUTH_METHOD_PROVIDER_HINTS = {
|
|
8
9
|
"api_key": "use a model provider like openai or anthropic, then pass --auth api_key",
|
|
@@ -74,22 +75,6 @@ const buildModelTarget = (options) => {
|
|
|
74
75
|
provider: options.provider
|
|
75
76
|
};
|
|
76
77
|
};
|
|
77
|
-
const collectManifestPaths = async (manifestPath, recursive, visited = new Set()) => {
|
|
78
|
-
const canonicalPath = getCanonicalManifestPath(manifestPath);
|
|
79
|
-
if (visited.has(canonicalPath)) {
|
|
80
|
-
return [];
|
|
81
|
-
}
|
|
82
|
-
visited.add(canonicalPath);
|
|
83
|
-
if (!recursive) {
|
|
84
|
-
return [canonicalPath];
|
|
85
|
-
}
|
|
86
|
-
const loadedManifest = await loadManifest(canonicalPath);
|
|
87
|
-
const childRefs = loadedManifest.manifest.kind === "team"
|
|
88
|
-
? loadedManifest.manifest.members.map((member) => member.ref)
|
|
89
|
-
: (loadedManifest.manifest.subagents ?? []).map((subagent) => subagent.ref);
|
|
90
|
-
const nestedPaths = await Promise.all(childRefs.map((ref) => collectManifestPaths(getManifestPath(path.resolve(getProjectRoot(canonicalPath), ref)), true, visited)));
|
|
91
|
-
return [canonicalPath, ...nestedPaths.flat()];
|
|
92
|
-
};
|
|
93
78
|
const updateManifestExecution = (manifest, model) => ({
|
|
94
79
|
...manifest,
|
|
95
80
|
execution: {
|
|
@@ -98,14 +83,14 @@ const updateManifestExecution = (manifest, model) => ({
|
|
|
98
83
|
}
|
|
99
84
|
});
|
|
100
85
|
const manifestChanged = (current, next) => JSON.stringify(current) !== JSON.stringify(next);
|
|
101
|
-
const
|
|
86
|
+
const mutateAgentDeclarations = (manifest, manifestPath, recursive, mutate) => {
|
|
102
87
|
if (manifest.kind === "agent") {
|
|
103
|
-
return
|
|
88
|
+
return mutate(manifest, manifestPath);
|
|
104
89
|
}
|
|
105
|
-
if (recursive) {
|
|
106
|
-
|
|
90
|
+
if (!recursive) {
|
|
91
|
+
throw new SpawnfileError("validation_error", TEAM_MODEL_COMMAND_ERROR);
|
|
107
92
|
}
|
|
108
|
-
|
|
93
|
+
return rewriteInlineAgentMembers(manifest, (member) => mutate(member, createInlineAgentSource(manifestPath, member.id)) ?? member);
|
|
109
94
|
};
|
|
110
95
|
const rewriteTouchedManifests = async (manifestPaths, mutate) => {
|
|
111
96
|
const updatedFiles = [];
|
|
@@ -123,59 +108,56 @@ const rewriteTouchedManifests = async (manifestPaths, mutate) => {
|
|
|
123
108
|
export const setProjectPrimaryModel = async (options) => {
|
|
124
109
|
const modelTarget = buildModelTarget(options);
|
|
125
110
|
const recursive = options.recursive ?? false;
|
|
126
|
-
const manifestPaths = await
|
|
127
|
-
return rewriteTouchedManifests(manifestPaths, (manifest) => {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
primary: modelTarget
|
|
111
|
+
const manifestPaths = await collectProjectManifestPaths(resolveTargetManifestPath(options.path), recursive);
|
|
112
|
+
return rewriteTouchedManifests(manifestPaths, (manifest, manifestPath) => {
|
|
113
|
+
return mutateAgentDeclarations(manifest, manifestPath, recursive, (declaration) => {
|
|
114
|
+
const normalizedModel = normalizeExecutionModel(declaration.execution);
|
|
115
|
+
return updateManifestExecution(declaration, {
|
|
116
|
+
...(normalizedModel?.fallback ? { fallback: normalizedModel.fallback } : {}),
|
|
117
|
+
primary: modelTarget
|
|
118
|
+
});
|
|
135
119
|
});
|
|
136
120
|
});
|
|
137
121
|
};
|
|
138
122
|
export const addProjectModelFallback = async (options) => {
|
|
139
123
|
const modelTarget = buildModelTarget(options);
|
|
140
124
|
const recursive = options.recursive ?? false;
|
|
141
|
-
const manifestPaths = await
|
|
125
|
+
const manifestPaths = await collectProjectManifestPaths(resolveTargetManifestPath(options.path), recursive);
|
|
142
126
|
return rewriteTouchedManifests(manifestPaths, (manifest, manifestPath) => {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
127
|
+
return mutateAgentDeclarations(manifest, manifestPath, recursive, (declaration, source) => {
|
|
128
|
+
const normalizedModel = normalizeExecutionModel(declaration.execution);
|
|
129
|
+
if (!normalizedModel) {
|
|
130
|
+
if (recursive) {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
throw new SpawnfileError("validation_error", `Manifest at ${source} must declare a primary model before adding fallback models`);
|
|
150
134
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
primary: normalizedModel.primary
|
|
135
|
+
const existingFallback = normalizedModel.fallback ?? [];
|
|
136
|
+
const nextFallback = existingFallback.some((entry) => JSON.stringify(entry) === JSON.stringify(modelTarget))
|
|
137
|
+
? existingFallback
|
|
138
|
+
: [...existingFallback, modelTarget];
|
|
139
|
+
return updateManifestExecution(declaration, {
|
|
140
|
+
fallback: nextFallback,
|
|
141
|
+
primary: normalizedModel.primary
|
|
142
|
+
});
|
|
160
143
|
});
|
|
161
144
|
});
|
|
162
145
|
};
|
|
163
146
|
export const clearProjectModelFallbacks = async (options = {}) => {
|
|
164
147
|
const recursive = options.recursive ?? false;
|
|
165
|
-
const manifestPaths = await
|
|
148
|
+
const manifestPaths = await collectProjectManifestPaths(resolveTargetManifestPath(options.path), recursive);
|
|
166
149
|
return rewriteTouchedManifests(manifestPaths, (manifest, manifestPath) => {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
150
|
+
return mutateAgentDeclarations(manifest, manifestPath, recursive, (declaration, source) => {
|
|
151
|
+
const normalizedModel = normalizeExecutionModel(declaration.execution);
|
|
152
|
+
if (!normalizedModel) {
|
|
153
|
+
if (recursive) {
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
throw new SpawnfileError("validation_error", `Manifest at ${source} does not declare any execution model`);
|
|
174
157
|
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
primary: normalizedModel.primary
|
|
158
|
+
return updateManifestExecution(declaration, {
|
|
159
|
+
primary: normalizedModel.primary
|
|
160
|
+
});
|
|
179
161
|
});
|
|
180
162
|
});
|
|
181
163
|
};
|