spawnfile 0.1.14 → 0.1.17
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 +60 -159
- package/dist/audit/checksShared.d.ts +1 -1
- package/dist/auth/importers.d.ts +10 -0
- package/dist/auth/importers.js +29 -4
- package/dist/auth/index.d.ts +2 -0
- package/dist/auth/index.js +1 -0
- package/dist/auth/paths.d.ts +1 -1
- package/dist/auth/profileStore.js +9 -9
- package/dist/auth/targetSecretSourceFsIdentity.d.ts +40 -0
- package/dist/auth/targetSecretSourceFsIdentity.js +42 -0
- package/dist/auth/targetSecretSourceFsPublish.d.ts +2 -0
- package/dist/auth/targetSecretSourceFsPublish.js +3 -1
- package/dist/auth/targetSecretSourceFsPublishImmutable.d.ts +2 -1
- package/dist/auth/targetSecretSourceFsPublishImmutable.js +104 -71
- package/dist/auth/targetSecretSourceFsRead.js +5 -14
- package/dist/auth/trainingAuth.d.ts +21 -0
- package/dist/auth/trainingAuth.js +86 -0
- package/dist/auth/types.d.ts +1 -1
- package/dist/cli/authCommands.d.ts +1 -1
- package/dist/cli/authCommands.js +9 -0
- package/dist/cli/canaryCutoverCommand.d.ts +2 -0
- package/dist/cli/canaryCutoverCommand.js +30 -0
- package/dist/cli/capabilitiesCommand.d.ts +3 -0
- package/dist/cli/capabilitiesCommand.js +12 -0
- package/dist/cli/capabilitiesReceipt.d.ts +56 -0
- package/dist/cli/capabilitiesReceipt.js +56 -0
- package/dist/cli/compileBuildCommands.js +13 -0
- package/dist/cli/composedLifecycleContractSet.d.ts +21 -0
- package/dist/cli/composedLifecycleContractSet.js +204 -0
- package/dist/cli/devCommands.js +2 -0
- package/dist/cli/downCommand.js +19 -8
- package/dist/cli/evidenceExportHelperCommand.d.ts +13 -0
- package/dist/cli/evidenceExportHelperCommand.js +51 -0
- package/dist/cli/index.js +12 -3
- package/dist/cli/lifecycleMachine.d.ts +7 -1
- package/dist/cli/lifecycleMachine.js +2 -2
- package/dist/cli/paideiaDelegation.d.ts +17 -0
- package/dist/cli/paideiaDelegation.js +210 -0
- package/dist/cli/paideiaSupervisor.d.ts +17 -0
- package/dist/cli/paideiaSupervisor.js +48 -0
- package/dist/cli/productStateCloneCommand.d.ts +2 -0
- package/dist/cli/productStateCloneCommand.js +34 -0
- package/dist/cli/runCli.d.ts +13 -3
- package/dist/cli/runCli.js +37 -9
- package/dist/cli/targetCommands.d.ts +4 -7
- package/dist/cli/targetCommands.js +16 -46
- package/dist/cli/targetConfigPreparedPlan.d.ts +3 -0
- package/dist/cli/targetConfigPreparedPlan.js +74 -0
- package/dist/cli/targetConfigResolver.d.ts +3 -0
- package/dist/cli/targetConfigResolver.js +111 -0
- package/dist/cli/targetConfigResolverCommand.d.ts +6 -0
- package/dist/cli/targetConfigResolverCommand.js +43 -0
- package/dist/cli/targetConfigResolverContracts.d.ts +56 -0
- package/dist/cli/targetConfigResolverContracts.js +30 -0
- package/dist/cli/targetConfigResolverDocker.d.ts +4 -0
- package/dist/cli/targetConfigResolverDocker.js +47 -0
- package/dist/cli/targetConfigResolverValidation.d.ts +10 -0
- package/dist/cli/targetConfigResolverValidation.js +94 -0
- package/dist/cli/targetDefaultAuthorities.d.ts +2 -0
- package/dist/cli/targetDefaultAuthorities.js +3 -0
- package/dist/cli/targetDefaultConfig.d.ts +7 -0
- package/dist/cli/targetDefaultConfig.js +22 -5
- package/dist/cli/targetDefaultConfigStdin.js +7 -1
- package/dist/cli/targetDefaultHandlerFactory.js +23 -2
- package/dist/cli/targetDefaultHandlers.d.ts +2 -2
- package/dist/cli/targetProductionCommands.d.ts +5 -0
- package/dist/cli/targetProductionCommands.js +45 -0
- package/dist/cli/trainCommand.d.ts +3 -0
- package/dist/cli/trainCommand.js +61 -0
- package/dist/cli/upCommand.js +35 -6
- package/dist/cli/upLifecycleRecovery.d.ts +2 -2
- package/dist/cli/upLifecycleRecovery.js +188 -44
- package/dist/cli/usageCommand.d.ts +40 -0
- package/dist/cli/usageCommand.js +284 -0
- package/dist/cli/usageCommandLive.d.ts +84 -0
- package/dist/cli/usageCommandLive.js +95 -0
- package/dist/cli/usageDeploymentSource.d.ts +9 -0
- package/dist/cli/usageDeploymentSource.js +22 -0
- package/dist/cli/workspaceResourceMigrationCommand.d.ts +8 -0
- package/dist/cli/workspaceResourceMigrationCommand.js +36 -0
- package/dist/compiler/buildCompilePlanTeams.d.ts +1 -1
- package/dist/compiler/buildCompilePlanTeams.js +6 -1
- package/dist/compiler/compilePlanHelpers.js +3 -0
- package/dist/compiler/compileProject.d.ts +2 -0
- package/dist/compiler/compileProject.js +5 -1
- package/dist/compiler/compileProjectSupport.js +9 -0
- package/dist/compiler/containerArtifacts.d.ts +3 -1
- package/dist/compiler/containerArtifacts.js +92 -40
- package/dist/compiler/containerArtifactsPlans.d.ts +1 -1
- package/dist/compiler/containerArtifactsPlans.js +24 -7
- package/dist/compiler/containerArtifactsRender.d.ts +2 -1
- package/dist/compiler/containerArtifactsRender.js +91 -58
- package/dist/compiler/containerArtifactsTypes.d.ts +8 -0
- package/dist/compiler/containerBackedMountRender.d.ts +56 -0
- package/dist/compiler/containerBackedMountRender.js +101 -0
- package/dist/compiler/containerDaimonBrokerRender.d.ts +112 -0
- package/dist/compiler/containerDaimonBrokerRender.js +191 -0
- package/dist/compiler/containerDaimonGrokWorkerProvisioning.d.ts +38 -0
- package/dist/compiler/containerDaimonGrokWorkerProvisioning.js +108 -0
- package/dist/compiler/containerDaimonGrokWorkerRender.d.ts +172 -0
- package/dist/compiler/containerDaimonGrokWorkerRender.js +268 -0
- package/dist/compiler/containerDaimonOwnershipGuardRender.d.ts +12 -0
- package/dist/compiler/containerDaimonOwnershipGuardRender.js +191 -0
- package/dist/compiler/containerDaimonUidEntrypointRender.d.ts +24 -0
- package/dist/compiler/containerDaimonUidEntrypointRender.js +297 -0
- package/dist/compiler/containerEntrypointRender.d.ts +7 -0
- package/dist/compiler/containerEntrypointRender.js +28 -22
- package/dist/compiler/containerPersistentMounts.d.ts +30 -0
- package/dist/compiler/containerPersistentMounts.js +66 -0
- package/dist/compiler/containerReadinessPaths.d.ts +1 -0
- package/dist/compiler/containerReadinessPaths.js +1 -0
- package/dist/compiler/containerRuntimeLinkMaterializer.d.ts +2 -0
- package/dist/compiler/containerRuntimeLinkMaterializer.js +12 -0
- package/dist/compiler/containerRuntimeReadinessRender.d.ts +7 -0
- package/dist/compiler/containerRuntimeReadinessRender.js +40 -0
- package/dist/compiler/containerStateOwnershipRender.d.ts +4 -0
- package/dist/compiler/containerStateOwnershipRender.js +75 -0
- package/dist/compiler/containerTargetResources.d.ts +22 -1
- package/dist/compiler/containerTargetResources.js +94 -2
- package/dist/compiler/containerVolumeBootstrap.d.ts +3 -0
- package/dist/compiler/containerVolumeBootstrap.js +3 -0
- package/dist/compiler/containerWorkspaceResourceRender.js +49 -1
- package/dist/compiler/daimonTelemetryArtifacts.d.ts +2 -2
- package/dist/compiler/daimonTelemetryArtifacts.js +5 -10
- package/dist/compiler/deploymentLineage.d.ts +40 -0
- package/dist/compiler/deploymentLineage.js +50 -0
- package/dist/compiler/index.d.ts +3 -0
- package/dist/compiler/index.js +3 -0
- package/dist/compiler/initProject.d.ts +2 -0
- package/dist/compiler/initProject.js +39 -1
- package/dist/compiler/localMoltnetAuthority.d.ts +64 -0
- package/dist/compiler/localMoltnetAuthority.js +177 -0
- package/dist/compiler/memoryArtifacts.d.ts +1 -1
- package/dist/compiler/memoryArtifacts.js +108 -32
- package/dist/compiler/modelEnv.d.ts +5 -0
- package/dist/compiler/modelEnv.js +8 -2
- package/dist/compiler/moltnetArtifactPaths.d.ts +17 -12
- package/dist/compiler/moltnetArtifactPaths.js +17 -15
- package/dist/compiler/moltnetArtifactTypes.d.ts +10 -0
- package/dist/compiler/moltnetArtifacts.d.ts +1 -1
- package/dist/compiler/moltnetArtifacts.js +52 -12
- package/dist/compiler/moltnetBinaries.d.ts +16 -4
- package/dist/compiler/moltnetBinaries.js +46 -6
- package/dist/compiler/moltnetClientConfig.js +1 -1
- package/dist/compiler/moltnetConfigLowering.d.ts +3 -1
- package/dist/compiler/moltnetConfigLowering.js +30 -6
- package/dist/compiler/moltnetNodeConfig.js +1 -1
- package/dist/compiler/moltnetReleaseAuthority.d.ts +24 -1
- package/dist/compiler/moltnetReleaseAuthority.js +33 -4
- package/dist/compiler/moltnetRepresentativeResolution.d.ts +1 -1
- package/dist/compiler/moltnetRepresentativeResolution.js +2 -2
- package/dist/compiler/moltnetResolution.js +9 -15
- package/dist/compiler/moltnetRoomMemberships.js +20 -5
- package/dist/compiler/moltnetRoomPolicyCompatibility.d.ts +1 -1
- package/dist/compiler/moltnetRoomPolicyCompatibility.js +3 -1
- package/dist/compiler/moltnetRuntimeConfig.d.ts +1 -1
- package/dist/compiler/moltnetRuntimeConfig.js +22 -2
- package/dist/compiler/moltnetServerPlans.js +19 -0
- package/dist/compiler/organizationExternalParticipants.d.ts +3 -0
- package/dist/compiler/organizationExternalParticipants.js +176 -0
- package/dist/compiler/organizationIdentity.d.ts +3 -9
- package/dist/compiler/organizationIdentity.js +37 -270
- package/dist/compiler/organizationIdentityGraph.d.ts +15 -0
- package/dist/compiler/organizationIdentityGraph.js +115 -0
- package/dist/compiler/organizationReadyEvidence.d.ts +8 -0
- package/dist/compiler/organizationReadyEvidence.js +23 -3
- package/dist/compiler/runProject.d.ts +4 -2
- package/dist/compiler/runProject.js +32 -6
- package/dist/compiler/runProjectAuth.d.ts +3 -1
- package/dist/compiler/runProjectAuth.js +19 -3
- package/dist/compiler/runProjectDaimonCodexDocker.d.ts +3 -0
- package/dist/compiler/runProjectDaimonCodexDocker.js +36 -0
- package/dist/compiler/runProjectDocker.d.ts +8 -4
- package/dist/compiler/runProjectDocker.js +43 -18
- package/dist/compiler/runProjectDockerDaimonGuards.d.ts +15 -0
- package/dist/compiler/runProjectDockerDaimonGuards.js +122 -0
- package/dist/compiler/runProjectDockerReservation.d.ts +3 -0
- package/dist/compiler/runProjectDockerReservation.js +118 -0
- package/dist/compiler/runProjectLifecycle.js +1 -1
- package/dist/compiler/training/broker/declaration.d.ts +45 -0
- package/dist/compiler/training/broker/declaration.js +55 -0
- package/dist/compiler/training/broker/entrypoint.d.ts +39 -0
- package/dist/compiler/training/broker/entrypoint.js +111 -0
- package/dist/compiler/training/broker/index.d.ts +10 -0
- package/dist/compiler/training/broker/index.js +10 -0
- package/dist/compiler/training/broker/main.d.ts +2 -0
- package/dist/compiler/training/broker/main.js +14 -0
- package/dist/compiler/training/broker/paths.d.ts +196 -0
- package/dist/compiler/training/broker/paths.js +241 -0
- package/dist/compiler/training/broker/processes.d.ts +42 -0
- package/dist/compiler/training/broker/processes.js +99 -0
- package/dist/compiler/training/broker/projection.d.ts +51 -0
- package/dist/compiler/training/broker/projection.js +76 -0
- package/dist/compiler/training/broker/provisioning.d.ts +87 -0
- package/dist/compiler/training/broker/provisioning.js +213 -0
- package/dist/compiler/training/broker/receipt.d.ts +77 -0
- package/dist/compiler/training/broker/receipt.js +110 -0
- package/dist/compiler/training/broker/registration.d.ts +41 -0
- package/dist/compiler/training/broker/registration.js +102 -0
- package/dist/compiler/training/broker/runtime.d.ts +25 -0
- package/dist/compiler/training/broker/runtime.js +173 -0
- package/dist/compiler/training/broker/seccompRoutes.d.ts +31 -0
- package/dist/compiler/training/broker/seccompRoutes.js +36 -0
- package/dist/compiler/training/broker/supervisor.d.ts +109 -0
- package/dist/compiler/training/broker/supervisor.js +173 -0
- package/dist/compiler/training/container/contract.d.ts +31 -0
- package/dist/compiler/training/container/contract.js +33 -0
- package/dist/compiler/training/container/index.d.ts +4 -0
- package/dist/compiler/training/container/index.js +2 -0
- package/dist/compiler/training/container/launch.d.ts +18 -0
- package/dist/compiler/training/container/launch.js +173 -0
- package/dist/compiler/training/container/prepare.d.ts +8 -0
- package/dist/compiler/training/container/prepare.js +80 -0
- package/dist/compiler/training/container/process.d.ts +14 -0
- package/dist/compiler/training/container/process.js +70 -0
- package/dist/compiler/training/container/security.d.ts +36 -0
- package/dist/compiler/training/container/security.js +58 -0
- package/dist/compiler/training/context.d.ts +7 -0
- package/dist/compiler/training/context.js +93 -0
- package/dist/compiler/training/contract.d.ts +142 -0
- package/dist/compiler/training/contract.js +34 -0
- package/dist/compiler/training/index.d.ts +4 -0
- package/dist/compiler/training/index.js +3 -0
- package/dist/compiler/training/preparation/assets/Dockerfile +98 -0
- package/dist/compiler/training/preparation/assets/package-lock.json +3787 -0
- package/dist/compiler/training/preparation/broker.d.ts +21 -0
- package/dist/compiler/training/preparation/broker.js +43 -0
- package/dist/compiler/training/preparation/contextModes.d.ts +12 -0
- package/dist/compiler/training/preparation/contextModes.js +38 -0
- package/dist/compiler/training/preparation/contract.d.ts +182 -0
- package/dist/compiler/training/preparation/contract.js +94 -0
- package/dist/compiler/training/preparation/copyAssets.d.ts +1 -0
- package/dist/compiler/training/preparation/copyAssets.js +8 -0
- package/dist/compiler/training/preparation/daimonParent.d.ts +42 -0
- package/dist/compiler/training/preparation/daimonParent.js +114 -0
- package/dist/compiler/training/preparation/files.d.ts +25 -0
- package/dist/compiler/training/preparation/files.js +85 -0
- package/dist/compiler/training/preparation/image.d.ts +28 -0
- package/dist/compiler/training/preparation/image.js +102 -0
- package/dist/compiler/training/preparation/index.d.ts +3 -0
- package/dist/compiler/training/preparation/index.js +2 -0
- package/dist/compiler/training/preparation/inputs.d.ts +23 -0
- package/dist/compiler/training/preparation/inputs.js +93 -0
- package/dist/compiler/training/preparation/prepare.d.ts +33 -0
- package/dist/compiler/training/preparation/prepare.js +186 -0
- package/dist/compiler/training/preparation/scratch.d.ts +19 -0
- package/dist/compiler/training/preparation/scratch.js +48 -0
- package/dist/compiler/training/repair/compatibility.d.ts +11 -0
- package/dist/compiler/training/repair/compatibility.js +34 -0
- package/dist/compiler/training/repair/contract.d.ts +506 -0
- package/dist/compiler/training/repair/contract.js +31 -0
- package/dist/compiler/training/repair/index.d.ts +3 -0
- package/dist/compiler/training/repair/index.js +3 -0
- package/dist/compiler/training/repair/prepare.d.ts +230 -0
- package/dist/compiler/training/repair/prepare.js +74 -0
- package/dist/compiler/training/repair/witness.d.ts +203 -0
- package/dist/compiler/training/repair/witness.js +42 -0
- package/dist/compiler/types.d.ts +2 -0
- package/dist/compiler/upProject.d.ts +26 -1
- package/dist/compiler/upProject.js +117 -178
- package/dist/compiler/upProjectHandoff.d.ts +62 -0
- package/dist/compiler/upProjectHandoff.js +204 -0
- package/dist/compiler/upReceipt.js +49 -4
- package/dist/compiler/updateProjectModels.js +1 -0
- package/dist/compiler/view/types.d.ts +1 -1
- package/dist/compiler/workspaceBundleArtifacts.d.ts +3 -0
- package/dist/compiler/workspaceBundleArtifacts.js +106 -0
- package/dist/compiler/workspaceResources.d.ts +4 -1
- package/dist/compiler/workspaceResources.js +12 -7
- package/dist/deployment/artifactsExportPlan.js +51 -1
- package/dist/deployment/canaryCutover.d.ts +42 -0
- package/dist/deployment/canaryCutover.js +140 -0
- package/dist/deployment/candidateDiagnostics.d.ts +15 -0
- package/dist/deployment/candidateDiagnostics.js +90 -0
- package/dist/deployment/dockerLogs.js +4 -1
- package/dist/deployment/dockerManager.js +9 -3
- package/dist/deployment/dockerProbeGateway.d.ts +17 -0
- package/dist/deployment/dockerProbeGateway.js +17 -2
- package/dist/deployment/downDeployment.d.ts +5 -0
- package/dist/deployment/downDeployment.js +109 -8
- package/dist/deployment/downReceiptTypes.d.ts +17 -2
- package/dist/deployment/downReceiptTypes.js +17 -2
- package/dist/deployment/index.d.ts +4 -0
- package/dist/deployment/index.js +4 -0
- package/dist/deployment/lifecycleCompletionContracts.d.ts +66 -0
- package/dist/deployment/lifecycleCompletionContracts.js +34 -0
- package/dist/deployment/lifecycleCompletionPaths.d.ts +4 -1
- package/dist/deployment/lifecycleCompletionPaths.js +3 -0
- package/dist/deployment/lifecycleCompletionPublication.d.ts +2 -0
- package/dist/deployment/lifecycleCompletionPublication.js +18 -4
- package/dist/deployment/lifecycleCompletionStore.d.ts +1 -1
- package/dist/deployment/lifecycleCompletionStore.js +7 -7
- package/dist/deployment/lifecycleUpRecords.d.ts +11 -0
- package/dist/deployment/lifecycleUpRecords.js +127 -0
- package/dist/deployment/native/AGENTS.md +11 -0
- package/dist/deployment/native/rename-noreplace-arm64 +0 -0
- package/dist/deployment/native/rename-noreplace-arm64.provenance.json +1 -0
- package/dist/deployment/native/rename-noreplace-x64 +0 -0
- package/dist/deployment/native/rename-noreplace-x64.provenance.json +1 -0
- package/dist/deployment/noReplaceActivation.d.ts +17 -0
- package/dist/deployment/noReplaceActivation.js +50 -0
- package/dist/deployment/organizationHandoffAuthorityFsBudget.d.ts +110 -0
- package/dist/deployment/organizationHandoffAuthorityFsBudget.js +156 -0
- package/dist/deployment/organizationHandoffAuthorityFsClient.js +82 -27
- package/dist/deployment/organizationHandoffAuthorityFsElection.d.ts +21 -0
- package/dist/deployment/organizationHandoffAuthorityFsElection.js +57 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorker.js +254 -108
- package/dist/deployment/organizationHandoffAuthorityFsWorkerStall.fixture.d.ts +1 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorkerStall.fixture.js +16 -0
- package/dist/deployment/organizationHandoffAuthorityStore.js +14 -7
- package/dist/deployment/organizationHandoffAuthorityTypes.d.ts +2 -2
- package/dist/deployment/organizationHandoffAuthorityTypes.js +2 -1
- package/dist/deployment/organizationReady.d.ts +2 -0
- package/dist/deployment/organizationReady.js +36 -4
- package/dist/deployment/productStateClone.d.ts +43 -0
- package/dist/deployment/productStateClone.js +319 -0
- package/dist/deployment/upLifecycleRecoveryState.d.ts +23 -0
- package/dist/deployment/upLifecycleRecoveryState.js +12 -0
- package/dist/deployment/upReceiptTypes.d.ts +32 -6
- package/dist/deployment/upReceiptTypes.js +29 -2
- package/dist/deployment/workspaceResourceMigration.d.ts +55 -0
- package/dist/deployment/workspaceResourceMigration.js +315 -0
- package/dist/dev/project.d.ts +7 -0
- package/dist/dev/project.js +9 -0
- package/dist/distribution/consumeImage.d.ts +2 -0
- package/dist/distribution/consumeImage.js +98 -73
- package/dist/distribution/consumeImageDaimonDocker.d.ts +3 -0
- package/dist/distribution/consumeImageDaimonDocker.js +45 -0
- package/dist/distribution/consumeImageLifecycle.d.ts +17 -0
- package/dist/distribution/consumeImageLifecycle.js +231 -0
- package/dist/distribution/consumeImageSupport.d.ts +12 -0
- package/dist/distribution/consumeImageSupport.js +15 -0
- package/dist/distribution/distributionReportSchema.d.ts +11 -1
- package/dist/distribution/distributionReportSchema.js +15 -2
- package/dist/distribution/dockerRunner.d.ts +6 -1
- package/dist/distribution/dockerRunner.js +31 -4
- package/dist/distribution/imageRuntimeAuth.d.ts +9 -1
- package/dist/distribution/imageRuntimeAuth.js +70 -1
- package/dist/distribution/index.d.ts +1 -1
- package/dist/distribution/index.js +1 -1
- package/dist/distribution/preflight.js +5 -1
- package/dist/distribution/types.d.ts +14 -1
- package/dist/distribution/types.js +3 -0
- package/dist/evidenceExportHelper/boundedExecutor.d.ts +3 -0
- package/dist/evidenceExportHelper/boundedExecutor.js +33 -0
- package/dist/evidenceExportHelper/helperProgram.mjs +156 -0
- package/dist/evidenceExportHelper/index.d.ts +4 -0
- package/dist/evidenceExportHelper/index.js +4 -0
- package/dist/evidenceExportHelper/preparedAuthority.d.ts +64 -0
- package/dist/evidenceExportHelper/preparedAuthority.js +228 -0
- package/dist/evidenceExportHelper/preparedBuilder.d.ts +10 -0
- package/dist/evidenceExportHelper/preparedBuilder.js +183 -0
- package/dist/evidenceExportHelper/preparedBuilderTypes.d.ts +19 -0
- package/dist/evidenceExportHelper/preparedBuilderTypes.js +1 -0
- package/dist/evidenceExportHelper/recipe.d.ts +7 -0
- package/dist/evidenceExportHelper/recipe.js +83 -0
- package/dist/filesystem/io.d.ts +2 -0
- package/dist/filesystem/io.js +16 -1
- package/dist/manifest/executionSchemas.d.ts +27 -0
- package/dist/manifest/executionSchemas.js +21 -2
- package/dist/manifest/mcpSchemas.d.ts +1 -0
- package/dist/manifest/mcpSchemas.js +3 -0
- package/dist/manifest/renderSpawnfileNetworks.js +11 -0
- package/dist/manifest/renderSpawnfileWorkspace.js +5 -0
- package/dist/manifest/scheduleSchemas.d.ts +3 -1
- package/dist/manifest/scheduleSchemas.js +91 -5
- package/dist/manifest/schemas.d.ts +237 -12
- package/dist/manifest/schemas.js +5 -2
- package/dist/manifest/teamNetworkAccessSchemas.d.ts +5 -1
- package/dist/manifest/teamNetworkAccessSchemas.js +11 -0
- package/dist/manifest/teamNetworkAuthSchemas.d.ts +1 -1
- package/dist/manifest/teamNetworkSchemas.d.ts +17 -3
- package/dist/manifest/teamNetworkSchemas.js +19 -1
- package/dist/manifest/teamNetworkServerSchemas.d.ts +8 -3
- package/dist/manifest/teamNetworkServerSchemas.js +18 -2
- package/dist/manifest/workspaceSchemas.d.ts +16 -0
- package/dist/manifest/workspaceSchemas.js +11 -0
- package/dist/report/types.d.ts +34 -4
- package/dist/runtime/common.d.ts +28 -1
- package/dist/runtime/common.js +33 -3
- package/dist/runtime/container.js +49 -33
- package/dist/runtime/daimon/adapter.d.ts +14 -0
- package/dist/runtime/daimon/adapter.js +243 -0
- package/dist/runtime/daimon/attention.d.ts +8 -0
- package/dist/runtime/daimon/attention.js +32 -0
- package/dist/runtime/daimon/config.d.ts +25 -0
- package/dist/runtime/daimon/config.js +272 -0
- package/dist/runtime/daimon/contractManifest.d.ts +295 -0
- package/dist/runtime/daimon/contractManifest.js +319 -0
- package/dist/runtime/daimon/grokModel.d.ts +19 -0
- package/dist/runtime/daimon/grokModel.js +33 -0
- package/dist/runtime/daimon/grokWorkerConfigBytes.d.ts +26 -0
- package/dist/runtime/daimon/grokWorkerConfigBytes.js +36 -0
- package/dist/runtime/daimon/grokWorkerContract.d.ts +22 -0
- package/dist/runtime/daimon/grokWorkerContract.js +48 -0
- package/dist/runtime/daimon/memory.d.ts +57 -0
- package/dist/runtime/daimon/memory.js +125 -0
- package/dist/runtime/daimon/runAuth.d.ts +51 -0
- package/dist/runtime/daimon/runAuth.js +279 -0
- package/dist/runtime/daimon/runtimeIdentity.d.ts +22 -0
- package/dist/runtime/daimon/runtimeIdentity.js +22 -0
- package/dist/runtime/daimon/scheduleAuthority.d.ts +3 -0
- package/dist/runtime/daimon/scheduleAuthority.js +17 -0
- package/dist/runtime/index.d.ts +4 -0
- package/dist/runtime/index.js +4 -0
- package/dist/runtime/install.d.ts +3 -0
- package/dist/runtime/install.js +3 -0
- package/dist/runtime/localDaimonAuthority.d.ts +11 -0
- package/dist/runtime/localDaimonAuthority.js +77 -0
- package/dist/runtime/mnemeMcp.d.ts +13 -0
- package/dist/runtime/mnemeMcp.js +26 -0
- package/dist/runtime/openclaw/adapter.js +2 -2
- package/dist/runtime/pi/adapter.d.ts +0 -1
- package/dist/runtime/pi/adapter.js +2 -6
- package/dist/runtime/pi/appCliSource.js +1 -1
- package/dist/runtime/pi/appScheduleSource.js +6 -2
- package/dist/runtime/pi/appTemplateTypes.d.ts +1 -1
- package/dist/runtime/picoclaw/adapter.js +2 -2
- package/dist/runtime/registry.d.ts +3 -0
- package/dist/runtime/registry.js +19 -2
- package/dist/runtime/scheduleUtils.d.ts +1 -0
- package/dist/runtime/scheduleUtils.js +5 -1
- package/dist/runtime/types.d.ts +25 -0
- package/dist/runtime/usageLedger.d.ts +158 -0
- package/dist/runtime/usageLedger.js +269 -0
- package/dist/runtime/usageLedgerRead.d.ts +48 -0
- package/dist/runtime/usageLedgerRead.js +102 -0
- package/dist/runtime/usageRequestLedger.d.ts +42 -0
- package/dist/runtime/usageRequestLedger.js +72 -0
- package/dist/shared/daimonCodexDocker.d.ts +32 -0
- package/dist/shared/daimonCodexDocker.js +120 -0
- package/dist/shared/daimonGrokSeccompProfile.d.ts +10 -0
- package/dist/shared/daimonGrokSeccompProfile.js +11 -0
- package/dist/shared/index.d.ts +2 -0
- package/dist/shared/index.js +2 -0
- package/dist/shared/types.d.ts +1 -1
- package/dist/shared/volumeNames.d.ts +6 -0
- package/dist/shared/volumeNames.js +14 -0
- package/dist/target/dockerArtifactsProvider.js +34 -7
- package/dist/target/dockerBaseImage.d.ts +2 -0
- package/dist/target/dockerBaseImage.js +11 -0
- package/dist/target/dockerCommandExecutor.d.ts +11 -0
- package/dist/target/dockerCommandExecutor.js +53 -2
- package/dist/target/dockerCommandExecutorCore.d.ts +2 -1
- package/dist/target/dockerCommandExecutorCore.js +4 -2
- package/dist/target/dockerPublicArtifactSnapshot.d.ts +3 -3
- package/dist/target/dockerPublicArtifactSnapshot.js +17 -33
- package/dist/target/dockerTarget.d.ts +1 -0
- package/dist/target/dockerTargetBinding.d.ts +1 -2
- package/dist/target/dockerTargetBinding.js +2 -3
- package/dist/target/dockerTargetExecFile.d.ts +19 -0
- package/dist/target/dockerTargetExecFile.js +194 -0
- package/dist/target/dockerWorldServiceProvider.d.ts +4 -0
- package/dist/target/dockerWorldServiceProvider.js +13 -1
- package/dist/target/evidenceExport.d.ts +3 -1
- package/dist/target/evidenceExport.js +12 -3
- package/dist/target/evidenceExportOperationsTestKit.js +3 -3
- package/dist/target/evidenceExportProvider.d.ts +2 -0
- package/dist/target/evidenceExportProvider.js +15 -5
- package/dist/target/publicArtifactSnapshot.d.ts +31 -0
- package/dist/target/publicArtifactSnapshot.js +37 -3
- package/examples/README.md +45 -0
- package/examples/agent-with-subagents/AGENTS.md +3 -0
- package/examples/agent-with-subagents/Spawnfile +30 -0
- package/examples/agent-with-subagents/subagents/critic/AGENTS.md +3 -0
- package/examples/agent-with-subagents/subagents/critic/Spawnfile +15 -0
- package/examples/agent-with-subagents/subagents/researcher/AGENTS.md +3 -0
- package/examples/agent-with-subagents/subagents/researcher/Spawnfile +17 -0
- package/examples/daimon-org/Spawnfile +68 -0
- package/examples/daimon-org/TEAM.md +4 -0
- package/examples/daimon-org/agents/mapper/AGENTS.md +4 -0
- package/examples/daimon-org/agents/mapper/Spawnfile +37 -0
- package/examples/daimon-org/shared/skills/file-note/SKILL.md +9 -0
- package/examples/daimon-org/teams/review/Spawnfile +53 -0
- package/examples/daimon-org/teams/review/agents/reviewer/AGENTS.md +4 -0
- package/examples/daimon-org/teams/review/agents/reviewer/Spawnfile +37 -0
- package/examples/daimon-public-host/AGENTS.md +3 -0
- package/examples/daimon-public-host/Spawnfile +21 -0
- package/examples/distribution-org/Spawnfile +43 -0
- package/examples/distribution-org/TEAM.md +4 -0
- package/examples/distribution-org/agents/coordinator/AGENTS.md +1 -0
- package/examples/distribution-org/agents/coordinator/Spawnfile +20 -0
- package/examples/distribution-org/agents/researcher/AGENTS.md +1 -0
- package/examples/distribution-org/agents/researcher/Spawnfile +20 -0
- package/examples/jungian-daimon-org/Spawnfile +41 -0
- package/examples/jungian-daimon-org/TEAM.md +21 -0
- package/examples/jungian-daimon-org/teams/luna/Spawnfile +47 -0
- package/examples/jungian-daimon-org/teams/luna/TEAM.md +4 -0
- package/examples/jungian-daimon-org/teams/luna/agents/animus/AGENTS.md +10 -0
- package/examples/jungian-daimon-org/teams/luna/agents/animus/Spawnfile +33 -0
- package/examples/jungian-daimon-org/teams/luna/agents/representative/AGENTS.md +21 -0
- package/examples/jungian-daimon-org/teams/luna/agents/representative/Spawnfile +30 -0
- package/examples/jungian-daimon-org/teams/luna/agents/shadow/AGENTS.md +10 -0
- package/examples/jungian-daimon-org/teams/luna/agents/shadow/Spawnfile +33 -0
- package/examples/jungian-daimon-org/teams/selene/Spawnfile +47 -0
- package/examples/jungian-daimon-org/teams/selene/TEAM.md +4 -0
- package/examples/jungian-daimon-org/teams/selene/agents/animus/AGENTS.md +10 -0
- package/examples/jungian-daimon-org/teams/selene/agents/animus/Spawnfile +33 -0
- package/examples/jungian-daimon-org/teams/selene/agents/representative/AGENTS.md +19 -0
- package/examples/jungian-daimon-org/teams/selene/agents/representative/Spawnfile +33 -0
- package/examples/jungian-daimon-org/teams/selene/agents/shadow/AGENTS.md +10 -0
- package/examples/jungian-daimon-org/teams/selene/agents/shadow/Spawnfile +30 -0
- package/examples/mixed-runtime-org/Spawnfile +71 -0
- package/examples/mixed-runtime-org/TEAM.md +8 -0
- package/examples/mixed-runtime-org/agents/analyst/AGENTS.md +8 -0
- package/examples/mixed-runtime-org/agents/analyst/Spawnfile +27 -0
- package/examples/mixed-runtime-org/agents/conductor/AGENTS.md +8 -0
- package/examples/mixed-runtime-org/agents/conductor/Spawnfile +27 -0
- package/examples/mixed-runtime-org/agents/localist/AGENTS.md +7 -0
- package/examples/mixed-runtime-org/agents/localist/Spawnfile +50 -0
- package/examples/moltnet-team-chat/Spawnfile +43 -0
- package/examples/moltnet-team-chat/TEAM.md +5 -0
- package/examples/moltnet-team-chat/agents/coordinator/AGENTS.md +9 -0
- package/examples/moltnet-team-chat/agents/coordinator/Spawnfile +26 -0
- package/examples/moltnet-team-chat/teams/analysis/Spawnfile +23 -0
- package/examples/moltnet-team-chat/teams/analysis/TEAM.md +3 -0
- package/examples/moltnet-team-chat/teams/analysis/agents/observer/AGENTS.md +5 -0
- package/examples/moltnet-team-chat/teams/analysis/agents/observer/Spawnfile +19 -0
- package/examples/moltnet-team-chat/teams/analysis/agents/representative/AGENTS.md +5 -0
- package/examples/moltnet-team-chat/teams/analysis/agents/representative/Spawnfile +19 -0
- package/examples/moltnet-team-chat/teams/field/Spawnfile +41 -0
- package/examples/moltnet-team-chat/teams/field/TEAM.md +3 -0
- package/examples/moltnet-team-chat/teams/field/agents/observer/AGENTS.md +5 -0
- package/examples/moltnet-team-chat/teams/field/agents/observer/Spawnfile +26 -0
- package/examples/moltnet-team-chat/teams/field/agents/representative/AGENTS.md +11 -0
- package/examples/moltnet-team-chat/teams/field/agents/representative/Spawnfile +26 -0
- package/examples/single-agent/AGENTS.md +3 -0
- package/examples/single-agent/HEARTBEAT.md +3 -0
- package/examples/single-agent/IDENTITY.md +3 -0
- package/examples/single-agent/MEMORY.md +3 -0
- package/examples/single-agent/SOUL.md +3 -0
- package/examples/single-agent/Spawnfile +41 -0
- package/examples/single-agent/skills/web_search/SKILL.md +6 -0
- package/moltnet-releases.json +5 -4
- package/package.json +36 -9
- package/runtimes.yaml +5 -2
- package/dist/cli/targetWorldClockCrossProcess.test-helper.d.ts +0 -13
- package/dist/cli/targetWorldClockCrossProcess.test-helper.js +0 -109
- package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.d.ts +0 -8
- package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.js +0 -60
- package/dist/deployment/simfileFixtureBoundary.test-helper.d.ts +0 -8
- package/dist/deployment/simfileFixtureBoundary.test-helper.js +0 -103
- package/dist/ownership/simfileRunOperatorInputs.d.ts +0 -103
- package/dist/ownership/simfileRunOperatorInputs.js +0 -139
- package/dist/target/cleanupRunDocker.test-helper.d.ts +0 -67
- package/dist/target/cleanupRunDocker.test-helper.js +0 -238
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { mkdtemp, rm, writeFile } from "node:fs/promises";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { setTimeout as delay } from "node:timers/promises";
|
|
6
|
+
import { fileURLToPath } from "node:url";
|
|
7
|
+
import { trainingContextSchema } from "../compiler/training/index.js";
|
|
8
|
+
import { launchTrainingContainer } from "../compiler/training/container/index.js";
|
|
9
|
+
import { runTrainingDocker } from "../compiler/training/container/process.js";
|
|
10
|
+
import { prepareTraining } from "../compiler/training/preparation/index.js";
|
|
11
|
+
import { readBoundedJson } from "../compiler/training/preparation/inputs.js";
|
|
12
|
+
import { SpawnfileError } from "../shared/index.js";
|
|
13
|
+
const MAX_LINE_BYTES = 1024 * 1024;
|
|
14
|
+
const validReceipt = (line, dryRun) => {
|
|
15
|
+
try {
|
|
16
|
+
const value = JSON.parse(line);
|
|
17
|
+
if (typeof value !== "object" || value === null)
|
|
18
|
+
return false;
|
|
19
|
+
const receipt = value;
|
|
20
|
+
return dryRun
|
|
21
|
+
? receipt.schema === "paideia.training-cost-plan.v1" && receipt.modelCallsMade === 0
|
|
22
|
+
: receipt.status === "completed" && typeof receipt.index === "string" && receipt.index.length > 0;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
const failure = (message) => new SpawnfileError("runtime_error", message);
|
|
29
|
+
const runChild = (options, contextPath) => new Promise((resolve, reject) => {
|
|
30
|
+
if (options.signal?.aborted) {
|
|
31
|
+
resolve(130);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
// Node strips types in a source checkout; the packaged build selects its emitted JS.
|
|
35
|
+
const extension = path.extname(fileURLToPath(import.meta.url));
|
|
36
|
+
const supervisor = fileURLToPath(new URL(`./paideiaSupervisor${extension}`, import.meta.url));
|
|
37
|
+
const child = spawn(process.execPath, ["--experimental-strip-types", supervisor, options.command,
|
|
38
|
+
"train", "--spawnfile-context", contextPath, ...options.args], {
|
|
39
|
+
shell: false, detached: true, stdio: ["ignore", "pipe", "pipe", "ipc"]
|
|
40
|
+
});
|
|
41
|
+
const pid = child.pid;
|
|
42
|
+
let stdout = "", stderr = "", lastLine = "";
|
|
43
|
+
let stopCode, error, outcome;
|
|
44
|
+
let reaped = false, closed = false, finished = false;
|
|
45
|
+
let killTimer;
|
|
46
|
+
const kill = (signal) => {
|
|
47
|
+
if (pid === undefined || reaped)
|
|
48
|
+
return;
|
|
49
|
+
try {
|
|
50
|
+
process.kill(-pid, signal);
|
|
51
|
+
}
|
|
52
|
+
catch (caught) {
|
|
53
|
+
if (caught.code !== "ESRCH")
|
|
54
|
+
error = failure("Could not signal the owned Paideia process group");
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
const groupExists = () => {
|
|
58
|
+
if (pid === undefined)
|
|
59
|
+
return false;
|
|
60
|
+
try {
|
|
61
|
+
process.kill(-pid, 0);
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
catch (caught) {
|
|
65
|
+
return caught.code !== "ESRCH";
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
const stop = (code, cause) => {
|
|
69
|
+
if (stopCode !== undefined)
|
|
70
|
+
return;
|
|
71
|
+
stopCode = code;
|
|
72
|
+
error = cause;
|
|
73
|
+
kill("SIGTERM");
|
|
74
|
+
killTimer = setTimeout(() => kill("SIGKILL"), 1000);
|
|
75
|
+
killTimer.unref();
|
|
76
|
+
};
|
|
77
|
+
const interrupt = () => stop(130), terminate = () => stop(143), abort = () => stop(130);
|
|
78
|
+
const timer = setTimeout(() => stop(1, failure("Paideia training exceeded its command deadline")), options.timeoutMs);
|
|
79
|
+
timer.unref();
|
|
80
|
+
process.once("SIGINT", interrupt);
|
|
81
|
+
process.once("SIGTERM", terminate);
|
|
82
|
+
options.signal?.addEventListener("abort", abort, { once: true });
|
|
83
|
+
if (options.signal?.aborted)
|
|
84
|
+
abort();
|
|
85
|
+
const consume = (chunk, channel) => {
|
|
86
|
+
const lines = ((channel === "stdout" ? stdout : stderr) + chunk).split("\n");
|
|
87
|
+
const remainder = lines.pop();
|
|
88
|
+
if ([remainder, ...lines].some((line) => Buffer.byteLength(line, "utf8") > MAX_LINE_BYTES)) {
|
|
89
|
+
stop(1, failure("Paideia output exceeded the bounded JSON-line contract"));
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
for (const raw of lines) {
|
|
93
|
+
const line = raw.replace(/\r$/u, "");
|
|
94
|
+
if (!line.trim())
|
|
95
|
+
continue;
|
|
96
|
+
if (channel === "stdout")
|
|
97
|
+
lastLine = line;
|
|
98
|
+
options.streams[channel](line);
|
|
99
|
+
}
|
|
100
|
+
if (channel === "stdout")
|
|
101
|
+
stdout = remainder;
|
|
102
|
+
else
|
|
103
|
+
stderr = remainder;
|
|
104
|
+
};
|
|
105
|
+
child.stdout.setEncoding("utf8").on("data", (chunk) => consume(chunk, "stdout"));
|
|
106
|
+
child.stderr.setEncoding("utf8").on("data", (chunk) => consume(chunk, "stderr"));
|
|
107
|
+
child.once("message", (message) => {
|
|
108
|
+
outcome = message;
|
|
109
|
+
if (message.type === "paideia.process.launch-error")
|
|
110
|
+
error = failure(`Could not start Paideia: ${message.message}`);
|
|
111
|
+
// The native child exited, but our supervisor still holds the group identity.
|
|
112
|
+
// Stop stragglers before permitting its leader to disappear or reporting completion.
|
|
113
|
+
kill("SIGKILL");
|
|
114
|
+
});
|
|
115
|
+
const finish = async () => {
|
|
116
|
+
if (finished)
|
|
117
|
+
return;
|
|
118
|
+
finished = true;
|
|
119
|
+
clearTimeout(timer);
|
|
120
|
+
clearTimeout(killTimer);
|
|
121
|
+
process.removeListener("SIGINT", interrupt);
|
|
122
|
+
process.removeListener("SIGTERM", terminate);
|
|
123
|
+
options.signal?.removeEventListener("abort", abort);
|
|
124
|
+
const deadline = Date.now() + 1500;
|
|
125
|
+
// Check only: never signal a numeric group identity after its supervisor was reaped.
|
|
126
|
+
while ((groupExists() || !closed) && Date.now() < deadline)
|
|
127
|
+
await delay(20);
|
|
128
|
+
if (groupExists() || !closed) {
|
|
129
|
+
error = failure("Paideia process cleanup is incomplete; group or output quiescence is unknown");
|
|
130
|
+
child.stdout.destroy();
|
|
131
|
+
child.stderr.destroy();
|
|
132
|
+
}
|
|
133
|
+
if (stdout.trim()) {
|
|
134
|
+
lastLine = stdout;
|
|
135
|
+
options.streams.stdout(stdout);
|
|
136
|
+
}
|
|
137
|
+
if (stderr.trim())
|
|
138
|
+
options.streams.stderr(stderr);
|
|
139
|
+
if (error) {
|
|
140
|
+
reject(error);
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
if (stopCode !== undefined) {
|
|
144
|
+
resolve(stopCode);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
if (outcome?.type !== "paideia.process.exited") {
|
|
148
|
+
reject(failure("Paideia supervisor exited without a native outcome"));
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
if (outcome.signal) {
|
|
152
|
+
resolve(outcome.signal === "SIGINT" ? 130 : outcome.signal === "SIGTERM" ? 143 : 1);
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
const exitCode = outcome.code ?? 1;
|
|
156
|
+
if ((exitCode === 0 || exitCode === 1) && !validReceipt(lastLine, options.dryRun)) {
|
|
157
|
+
reject(failure("Paideia exited without the required final training receipt"));
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
resolve(exitCode);
|
|
161
|
+
};
|
|
162
|
+
child.once("error", (caught) => { error = failure(`Could not start Paideia supervisor: ${caught.message}`); });
|
|
163
|
+
child.once("exit", () => { reaped = true; void finish(); });
|
|
164
|
+
child.once("close", () => { closed = true; void finish(); });
|
|
165
|
+
});
|
|
166
|
+
/** Delegates through the public CLI, never importing Paideia or selecting a fallback adapter. */
|
|
167
|
+
export const delegatePaideiaTraining = async (options) => {
|
|
168
|
+
if (options.signal?.aborted)
|
|
169
|
+
return 130;
|
|
170
|
+
if (options.repairWitness && !options.repairMeasurements)
|
|
171
|
+
throw failure("--repair-witness requires --repair-measurements");
|
|
172
|
+
if (options.trainingConfig) {
|
|
173
|
+
const config = await readBoundedJson(options.trainingConfig);
|
|
174
|
+
// v2 and v3 are both declarative preparations; a v3 *launch* config (already lowered, with `inputs`) goes straight to Docker.
|
|
175
|
+
if (config.version === "spawnfile.training-container.v2" || (config.version === "spawnfile.training-container.v3" && config.image !== undefined)) {
|
|
176
|
+
if (options.trainingImage)
|
|
177
|
+
throw failure("V2 owns its image declaration; --training-image is only for v1");
|
|
178
|
+
const prepared = await prepareTraining({ configPath: options.trainingConfig, context: options.context, args: options.args,
|
|
179
|
+
repairMeasurements: options.repairMeasurements, repairWitness: options.repairWitness,
|
|
180
|
+
dryRun: options.dryRun, process: runTrainingDocker, timeoutMs: options.timeoutMs, signal: options.signal, streams: options.streams });
|
|
181
|
+
if (!("dryRun" in prepared))
|
|
182
|
+
return launchTrainingContainer({ ...prepared,
|
|
183
|
+
timeoutMs: options.timeoutMs, signal: options.signal, streams: options.streams });
|
|
184
|
+
options.streams.stderr(`Training preparation plan ${prepared.digest}; no Docker, auth or filesystem mutations`);
|
|
185
|
+
options = { ...options, repairMeasurements: undefined, repairWitness: undefined };
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
if (options.repairMeasurements)
|
|
189
|
+
throw failure("Measurement repair requires the v2 preparation declaration");
|
|
190
|
+
if (!options.dryRun) {
|
|
191
|
+
if (!options.trainingImage || !options.trainingConfig)
|
|
192
|
+
throw failure("Actual training requires --training-image and --training-config; host execution is disabled");
|
|
193
|
+
return launchTrainingContainer({ image: options.trainingImage, configPath: options.trainingConfig,
|
|
194
|
+
context: options.context, args: options.args, timeoutMs: options.timeoutMs, streams: options.streams, signal: options.signal });
|
|
195
|
+
}
|
|
196
|
+
if (process.platform === "win32")
|
|
197
|
+
throw failure("Paideia delegation requires POSIX process-group supervision");
|
|
198
|
+
const bytes = JSON.stringify(trainingContextSchema.parse(options.context));
|
|
199
|
+
if (Buffer.byteLength(bytes, "utf8") > MAX_LINE_BYTES)
|
|
200
|
+
throw new SpawnfileError("validation_error", "Training context exceeds 1 MiB");
|
|
201
|
+
const temporary = await mkdtemp(path.join(os.tmpdir(), "spawnfile-training-"));
|
|
202
|
+
const contextPath = path.join(temporary, "context.json");
|
|
203
|
+
try {
|
|
204
|
+
await writeFile(contextPath, bytes, { mode: 0o600, flag: "wx" });
|
|
205
|
+
return await runChild(options, contextPath);
|
|
206
|
+
}
|
|
207
|
+
finally {
|
|
208
|
+
await rm(temporary, { recursive: true, force: true });
|
|
209
|
+
}
|
|
210
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type ChildProcess } from "node:child_process";
|
|
2
|
+
export type PaideiaProcessOutcome = {
|
|
3
|
+
type: "paideia.process.exited";
|
|
4
|
+
code: number | null;
|
|
5
|
+
signal: NodeJS.Signals | null;
|
|
6
|
+
} | {
|
|
7
|
+
type: "paideia.process.launch-error";
|
|
8
|
+
message: string;
|
|
9
|
+
};
|
|
10
|
+
type SupervisorProcess = Pick<NodeJS.Process, "send" | "pid" | "on" | "removeListener" | "kill" | "exit">;
|
|
11
|
+
export interface PaideiaSupervisorHost {
|
|
12
|
+
process: SupervisorProcess;
|
|
13
|
+
launch(command: string, args: string[]): ChildProcess;
|
|
14
|
+
}
|
|
15
|
+
/** Remains the owned group leader until the parent closes the entire group. */
|
|
16
|
+
export declare const supervisePaideia: (argv: readonly string[], host?: PaideiaSupervisorHost) => (() => void);
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
const defaultHost = {
|
|
5
|
+
process,
|
|
6
|
+
launch: (command, args) => spawn(command, args, { shell: false, stdio: ["ignore", "inherit", "inherit"] })
|
|
7
|
+
};
|
|
8
|
+
/** Remains the owned group leader until the parent closes the entire group. */
|
|
9
|
+
export const supervisePaideia = (argv, host = defaultHost) => {
|
|
10
|
+
const [command, ...args] = argv;
|
|
11
|
+
if (!command || !host.process.send)
|
|
12
|
+
throw new Error("Paideia supervisor requires an executable and private IPC");
|
|
13
|
+
const hold = setInterval(() => undefined, 1000);
|
|
14
|
+
const ignore = () => undefined;
|
|
15
|
+
const disconnect = () => {
|
|
16
|
+
// This process is still alive: its own group identity cannot have been recycled.
|
|
17
|
+
try {
|
|
18
|
+
host.process.kill(-host.process.pid, "SIGKILL");
|
|
19
|
+
}
|
|
20
|
+
finally {
|
|
21
|
+
host.process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
host.process.on("SIGINT", ignore).on("SIGTERM", ignore).on("disconnect", disconnect);
|
|
25
|
+
let reported = false;
|
|
26
|
+
const report = (outcome) => {
|
|
27
|
+
if (reported)
|
|
28
|
+
return;
|
|
29
|
+
reported = true;
|
|
30
|
+
host.process.send(outcome);
|
|
31
|
+
};
|
|
32
|
+
const child = host.launch(command, args);
|
|
33
|
+
child.once("error", (error) => report({ type: "paideia.process.launch-error", message: error.message }));
|
|
34
|
+
child.once("exit", (code, signal) => report({ type: "paideia.process.exited", code, signal }));
|
|
35
|
+
return () => {
|
|
36
|
+
clearInterval(hold);
|
|
37
|
+
host.process.removeListener("SIGINT", ignore).removeListener("SIGTERM", ignore).removeListener("disconnect", disconnect);
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
if (process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url)) {
|
|
41
|
+
try {
|
|
42
|
+
supervisePaideia(process.argv.slice(2));
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
|
|
46
|
+
process.exitCode = 1;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { issueProductStateSourceSnapshot, runProductStateCloneWorkflow } from "../deployment/productStateClone.js";
|
|
5
|
+
const requestSchema = z.object({ version: z.literal("spawnfile.product-state-clone-request.v1"), authority_receipt_path: z.string().min(1).max(4096), docker_command: z.string().min(1).max(4096), destination: z.string().min(1).max(4096), proof_path: z.string().min(1).max(4096), receipt_path: z.string().min(1).max(4096), candidate_run_id: z.string().regex(/^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$/u) }).strict();
|
|
6
|
+
const authorityRequestSchema = z.object({ version: z.literal("spawnfile.product-state-source-authority-request.v1"), docker_command: z.string().min(1).max(4096), container: z.string().min(1).max(255), source_run_id: z.string().min(1).max(128), mount_path: z.string().min(1).max(4096), candidate_volume_name: z.string().min(1).max(255), candidate_resource_identity: z.string().regex(/^sha256:[a-f0-9]{64}$/u), receipt_path: z.string().min(1).max(4096), proof_path: z.string().min(1).max(4096) }).strict();
|
|
7
|
+
export const isProductStateCloneInvocation = (argv) => argv[0] === "product-state" && ["authority", "clone"].includes(argv[1] ?? "");
|
|
8
|
+
export const runProductStateCloneCommand = async (argv) => {
|
|
9
|
+
try {
|
|
10
|
+
if (argv.length !== 3)
|
|
11
|
+
throw new Error("usage");
|
|
12
|
+
const bytes = await readFile(argv[2]);
|
|
13
|
+
if (bytes.length > 65_536)
|
|
14
|
+
throw new Error("oversized");
|
|
15
|
+
if (argv[1] === "authority") {
|
|
16
|
+
const request = authorityRequestSchema.parse(JSON.parse(bytes.toString("utf8"))), snapshot = await issueProductStateSourceSnapshot({ dockerCommand: request.docker_command, container: request.container, sourceRunId: request.source_run_id, mountPath: request.mount_path, candidateVolumeName: request.candidate_volume_name, candidateResourceIdentity: request.candidate_resource_identity });
|
|
17
|
+
await mkdir(path.dirname(request.receipt_path), { recursive: true, mode: 0o700 });
|
|
18
|
+
await writeFile(request.proof_path, `${JSON.stringify(snapshot.proof)}\n`, { flag: "wx", mode: 0o600 });
|
|
19
|
+
await writeFile(request.receipt_path, `${JSON.stringify(snapshot.authority)}\n`, { flag: "wx", mode: 0o600 });
|
|
20
|
+
process.stdout.write(`${JSON.stringify(snapshot.authority)}\n`);
|
|
21
|
+
return 0;
|
|
22
|
+
}
|
|
23
|
+
const request = requestSchema.parse(JSON.parse(bytes.toString("utf8")));
|
|
24
|
+
process.stdout.write(`${JSON.stringify(await runProductStateCloneWorkflow({ authorityReceiptPath: request.authority_receipt_path, dockerCommand: request.docker_command, destination: request.destination, proofPath: request.proof_path, receiptPath: request.receipt_path, candidateRunId: request.candidate_run_id }))}\n`);
|
|
25
|
+
return 0;
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
// Carry the cause. A bare "failed" is undiagnosable in CI, where this runs
|
|
29
|
+
// against a different Docker and architecture than any developer machine.
|
|
30
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
31
|
+
process.stderr.write(`error: Product-state clone failed: ${detail}\n`);
|
|
32
|
+
return 1;
|
|
33
|
+
}
|
|
34
|
+
};
|
package/dist/cli/runCli.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { importClaudeCodeAuth, importCodexAuth, importEnvFile, initializeTargetSecretSourceLifecycle, provisionCredentials, requireAuthProfile } from "../auth/index.js";
|
|
2
|
-
import { addAgentProject, addProjectSurface, addProjectModelFallback, addSubagentProject, addTeamProject, buildOrganizationView, buildCompilePlan, buildProject, buildUpReceipt, clearProjectModelFallbacks, compileProject, initProject, publishProject, upProject, removeProjectSurface, runProject, setProjectPrimaryModel, setProjectRuntime, setProjectSurfaceAccess, showProjectSurfaces, syncProjectAuth } from "../compiler/index.js";
|
|
1
|
+
import { importClaudeCodeAuth, importCodexAuth, importGrokAuth, importEnvFile, initializeTargetSecretSourceLifecycle, provisionCredentials, requireAuthProfile } from "../auth/index.js";
|
|
2
|
+
import { addAgentProject, addProjectSurface, addProjectModelFallback, addSubagentProject, addTeamProject, buildOrganizationView, buildCompilePlan, buildProject, buildUpReceipt, clearProjectModelFallbacks, compileProject, createTrainingContext, initProject, listInitTemplates, publishProject, upProject, removeProjectSurface, runProject, setProjectPrimaryModel, setProjectRuntime, setProjectSurfaceAccess, showProjectSurfaces, syncProjectAuth } from "../compiler/index.js";
|
|
3
3
|
import { devActivityProject, devApplyProject, devRestartProject, devStopProject, devUpProject } from "../dev/index.js";
|
|
4
4
|
import { consumeImageUp } from "../distribution/index.js";
|
|
5
|
-
import { downDeployment, exportRunArtifacts } from "../deployment/index.js";
|
|
5
|
+
import { createDockerProbeGateway, downDeployment, exportRunArtifacts, inspectDockerDeployment, listDeploymentRecords, listHomeDeploymentRecords } from "../deployment/index.js";
|
|
6
6
|
import { listRuntimeAdapters } from "../runtime/index.js";
|
|
7
|
+
import { delegatePaideiaTraining } from "./paideiaDelegation.js";
|
|
7
8
|
export interface CliStreams {
|
|
8
9
|
stderr: (message: string) => void;
|
|
9
10
|
stdout: (message: string) => void;
|
|
@@ -14,6 +15,8 @@ export interface CliRenderEnvironment {
|
|
|
14
15
|
stdoutIsTty: boolean;
|
|
15
16
|
}
|
|
16
17
|
export interface CliHandlers {
|
|
18
|
+
createTrainingContext: typeof createTrainingContext;
|
|
19
|
+
delegatePaideiaTraining: typeof delegatePaideiaTraining;
|
|
17
20
|
buildCompilePlan: typeof buildCompilePlan;
|
|
18
21
|
buildOrganizationView: typeof buildOrganizationView;
|
|
19
22
|
buildProject: typeof buildProject;
|
|
@@ -27,12 +30,18 @@ export interface CliHandlers {
|
|
|
27
30
|
clearProjectModelFallbacks: typeof clearProjectModelFallbacks;
|
|
28
31
|
importClaudeCodeAuth: typeof importClaudeCodeAuth;
|
|
29
32
|
importCodexAuth: typeof importCodexAuth;
|
|
33
|
+
importGrokAuth: typeof importGrokAuth;
|
|
30
34
|
importEnvFile: typeof importEnvFile;
|
|
31
35
|
initProject: typeof initProject;
|
|
36
|
+
listInitTemplates: typeof listInitTemplates;
|
|
32
37
|
initializeTargetSecretSourceLifecycle: typeof initializeTargetSecretSourceLifecycle;
|
|
33
38
|
provisionCredentials: typeof provisionCredentials;
|
|
34
39
|
exportRunArtifacts: typeof exportRunArtifacts;
|
|
35
40
|
downDeployment: typeof downDeployment;
|
|
41
|
+
createDockerProbeGateway: typeof createDockerProbeGateway;
|
|
42
|
+
inspectDockerDeployment: typeof inspectDockerDeployment;
|
|
43
|
+
listDeploymentRecords: typeof listDeploymentRecords;
|
|
44
|
+
listHomeDeploymentRecords: typeof listHomeDeploymentRecords;
|
|
36
45
|
listRuntimeAdapters: typeof listRuntimeAdapters;
|
|
37
46
|
removeProjectSurface: typeof removeProjectSurface;
|
|
38
47
|
requireAuthProfile: typeof requireAuthProfile;
|
|
@@ -56,6 +65,7 @@ export interface RunCliOptions {
|
|
|
56
65
|
renderEnvironment?: CliRenderEnvironment;
|
|
57
66
|
stdin?: AsyncIterable<unknown>;
|
|
58
67
|
streams?: CliStreams;
|
|
68
|
+
signal?: AbortSignal;
|
|
59
69
|
}
|
|
60
70
|
type RunCli = {
|
|
61
71
|
(argv: string[], options?: RunCliOptions): Promise<number>;
|
package/dist/cli/runCli.js
CHANGED
|
@@ -1,22 +1,27 @@
|
|
|
1
1
|
import { readFileSync } from "node:fs";
|
|
2
2
|
import { Command } from "commander";
|
|
3
|
-
import { importClaudeCodeAuth, importCodexAuth, importEnvFile, initializeTargetSecretSourceLifecycle, provisionCredentials, requireAuthProfile } from "../auth/index.js";
|
|
4
|
-
import { addAgentProject, addProjectSurface, addProjectModelFallback, addSubagentProject, addTeamProject, buildOrganizationView, buildCompilePlan, buildProject, buildUpReceipt, clearProjectModelFallbacks, compileProject, initProject, publishProject, upProject, removeProjectSurface, runProject, setProjectPrimaryModel, setProjectRuntime, setProjectSurfaceAccess, showProjectSurfaces, syncProjectAuth } from "../compiler/index.js";
|
|
3
|
+
import { importClaudeCodeAuth, importCodexAuth, importGrokAuth, importEnvFile, initializeTargetSecretSourceLifecycle, provisionCredentials, requireAuthProfile } from "../auth/index.js";
|
|
4
|
+
import { addAgentProject, addProjectSurface, addProjectModelFallback, addSubagentProject, addTeamProject, buildOrganizationView, buildCompilePlan, buildProject, buildUpReceipt, clearProjectModelFallbacks, compileProject, createTrainingContext, initProject, listInitTemplates, publishProject, upProject, removeProjectSurface, runProject, setProjectPrimaryModel, setProjectRuntime, setProjectSurfaceAccess, showProjectSurfaces, syncProjectAuth } from "../compiler/index.js";
|
|
5
5
|
import { devActivityProject, devApplyProject, devRestartProject, devStopProject, devUpProject } from "../dev/index.js";
|
|
6
6
|
import { consumeImageUp } from "../distribution/index.js";
|
|
7
|
-
import { downDeployment, exportRunArtifacts } from "../deployment/index.js";
|
|
7
|
+
import { createDockerProbeGateway, downDeployment, exportRunArtifacts, inspectDockerDeployment, listDeploymentRecords, listHomeDeploymentRecords } from "../deployment/index.js";
|
|
8
8
|
import { errorExitCode, isSpawnfileError } from "../shared/index.js";
|
|
9
9
|
import { listRuntimeAdapters } from "../runtime/index.js";
|
|
10
10
|
import { registerArtifactsCommands } from "./artifactsCommands.js";
|
|
11
11
|
import { registerAuthCommands } from "./authCommands.js";
|
|
12
|
+
import { registerCapabilitiesCommand } from "./capabilitiesCommand.js";
|
|
12
13
|
import { registerDevCommands } from "./devCommands.js";
|
|
14
|
+
import { registerEvidenceExportHelperCommand } from "./evidenceExportHelperCommand.js";
|
|
13
15
|
import { registerLifecycleCommands } from "./lifecycleCommands.js";
|
|
14
16
|
import { registerModelCommands } from "./modelCommands.js";
|
|
15
17
|
import { registerRuntimeCommands } from "./runtimeCommands.js";
|
|
16
18
|
import { registerSurfaceCommands } from "./surfaceCommands.js";
|
|
17
19
|
import { registerStatusCommand } from "./statusCommand.js";
|
|
18
|
-
import {
|
|
20
|
+
import { registerUsageCommand } from "./usageCommand.js";
|
|
21
|
+
import { registerProductionTargetCommands } from "./targetProductionCommands.js";
|
|
19
22
|
import { registerViewCommand } from "./viewCommand.js";
|
|
23
|
+
import { registerTrainCommand } from "./trainCommand.js";
|
|
24
|
+
import { delegatePaideiaTraining } from "./paideiaDelegation.js";
|
|
20
25
|
const packageJsonPath = new URL("../../package.json", import.meta.url);
|
|
21
26
|
const readPackageVersion = () => {
|
|
22
27
|
const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf8"));
|
|
@@ -32,13 +37,15 @@ const createDefaultRenderEnvironment = () => ({
|
|
|
32
37
|
stdoutIsTty: process.stdout.isTTY === true
|
|
33
38
|
});
|
|
34
39
|
const createDefaultHandlers = () => ({
|
|
40
|
+
createTrainingContext, delegatePaideiaTraining,
|
|
35
41
|
buildCompilePlan, buildOrganizationView, buildProject, compileProject, publishProject,
|
|
36
42
|
addAgentProject, addProjectModelFallback, addProjectSurface,
|
|
37
43
|
addSubagentProject, addTeamProject, clearProjectModelFallbacks,
|
|
38
|
-
importClaudeCodeAuth, importCodexAuth, importEnvFile, initializeTargetSecretSourceLifecycle,
|
|
44
|
+
importClaudeCodeAuth, importCodexAuth, importGrokAuth, importEnvFile, initializeTargetSecretSourceLifecycle,
|
|
39
45
|
provisionCredentials,
|
|
40
|
-
exportRunArtifacts, downDeployment,
|
|
41
|
-
|
|
46
|
+
createDockerProbeGateway, exportRunArtifacts, downDeployment, inspectDockerDeployment,
|
|
47
|
+
listDeploymentRecords, listHomeDeploymentRecords,
|
|
48
|
+
initProject, listInitTemplates, listRuntimeAdapters, removeProjectSurface, requireAuthProfile,
|
|
42
49
|
runProject, setProjectPrimaryModel, setProjectRuntime, upProject, buildUpReceipt, consumeImageUp,
|
|
43
50
|
devActivityProject, devApplyProject, devRestartProject, devStopProject, devUpProject,
|
|
44
51
|
setProjectSurfaceAccess, showProjectSurfaces, syncProjectAuth
|
|
@@ -58,7 +65,8 @@ const normalizeRunCliOptions = (optionsOrStreams, handlerOverrides = {}) => isCl
|
|
|
58
65
|
handlers: optionsOrStreams?.handlers ?? handlerOverrides,
|
|
59
66
|
renderEnvironment: optionsOrStreams?.renderEnvironment ?? createDefaultRenderEnvironment(),
|
|
60
67
|
stdin: optionsOrStreams?.stdin ?? process.stdin,
|
|
61
|
-
streams: optionsOrStreams?.streams ?? createDefaultStreams()
|
|
68
|
+
streams: optionsOrStreams?.streams ?? createDefaultStreams(),
|
|
69
|
+
signal: optionsOrStreams?.signal
|
|
62
70
|
};
|
|
63
71
|
const writeCommanderOutput = (write, message) => {
|
|
64
72
|
const normalized = message.replace(/\n$/, "");
|
|
@@ -113,17 +121,31 @@ export const runCli = async (argv, optionsOrStreams, handlerOverrides = {}) => {
|
|
|
113
121
|
registerLifecycleCommands(program, handlers, streams, cliOptions.stdin);
|
|
114
122
|
registerDevCommands(program, handlers, streams);
|
|
115
123
|
registerArtifactsCommands(program, handlers, streams);
|
|
124
|
+
registerCapabilitiesCommand(program, streams, readPackageVersion());
|
|
125
|
+
registerEvidenceExportHelperCommand(program, streams, (exitCode) => {
|
|
126
|
+
commandExitCode = exitCode;
|
|
127
|
+
});
|
|
116
128
|
program
|
|
117
129
|
.command("init")
|
|
118
130
|
.description("Scaffold a new Spawnfile project or team in a directory")
|
|
119
131
|
.argument("[path]", "Directory to initialize", process.cwd())
|
|
120
132
|
.option("--team", "Initialize a team project")
|
|
121
133
|
.option("--runtime <name>", "Runtime for agent scaffolds")
|
|
134
|
+
.option("--template <name>", "Scaffold from a bundled example template")
|
|
135
|
+
.option("--list-templates", "List available example templates and exit")
|
|
122
136
|
.action(async (inputPath, options) => {
|
|
137
|
+
if (options.listTemplates) {
|
|
138
|
+
const templates = await handlers.listInitTemplates();
|
|
139
|
+
for (const template of templates) {
|
|
140
|
+
streams.stdout(template);
|
|
141
|
+
}
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
123
144
|
const result = await handlers.initProject({
|
|
124
145
|
directory: inputPath,
|
|
125
146
|
runtime: options.runtime,
|
|
126
|
-
team: options.team
|
|
147
|
+
team: options.team,
|
|
148
|
+
template: options.template
|
|
127
149
|
});
|
|
128
150
|
streams.stdout(`initialized ${result.directory}`);
|
|
129
151
|
emitFileLines(streams, "created", result.createdFiles);
|
|
@@ -176,7 +198,13 @@ export const runCli = async (argv, optionsOrStreams, handlerOverrides = {}) => {
|
|
|
176
198
|
registerStatusCommand(program, handlers, streams, (exitCode) => {
|
|
177
199
|
commandExitCode = exitCode;
|
|
178
200
|
});
|
|
201
|
+
registerUsageCommand(program, streams, (exitCode) => {
|
|
202
|
+
commandExitCode = exitCode;
|
|
203
|
+
}, handlers);
|
|
179
204
|
registerViewCommand(program, handlers, streams, cliOptions.renderEnvironment);
|
|
205
|
+
registerTrainCommand(program, handlers, streams, readPackageVersion(), (code) => {
|
|
206
|
+
commandExitCode = code;
|
|
207
|
+
}, cliOptions.signal);
|
|
180
208
|
registerProductionTargetCommands(program, streams, cliOptions.stdin, (exitCode) => {
|
|
181
209
|
commandExitCode = exitCode;
|
|
182
210
|
});
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import type { Command } from "commander";
|
|
2
|
-
import { type
|
|
2
|
+
import { type TargetPublicArtifactSnapshotRequest, type TargetPublicArtifactSnapshotResult } from "../target/publicArtifactSnapshot.js";
|
|
3
3
|
import { type TargetTopologyActivationResult } from "../target/topologyActivation.js";
|
|
4
4
|
import { type SelectedTargetReceipt, type TargetResourceRequest, type TargetTopologyAttestationRequest } from "../target/contracts.js";
|
|
5
5
|
import { type TargetOperation } from "./targetOperationDispatch.js";
|
|
6
6
|
import { type TargetMutationResult } from "./targetReceiptOutput.js";
|
|
7
|
-
import type { TargetDefaultConfig } from "./targetDefaultConfig.js";
|
|
8
7
|
import { type TargetOperationLookupLoader } from "./targetLookupCommands.js";
|
|
9
8
|
import type { TargetTopologyAttestationResult } from "../target/topologyAttestation.js";
|
|
10
9
|
import { type TargetWorldClockSession } from "./targetWorldClockCommand.js";
|
|
@@ -20,14 +19,12 @@ export interface TargetCommandHandlerSession extends TargetWorldReadinessSession
|
|
|
20
19
|
run<Result>(invoke: (handlers: TargetCommandHandlers) => Promise<Result>): Promise<Result>;
|
|
21
20
|
activateTopology?(request: TargetTopologyAttestationRequest): Promise<TargetTopologyActivationResult>;
|
|
22
21
|
attestTopology?(request: TargetTopologyAttestationRequest): Promise<TargetTopologyAttestationResult>;
|
|
23
|
-
snapshotPublicArtifact?(request: TargetPublicArtifactSnapshotRequest): Promise<
|
|
22
|
+
snapshotPublicArtifact?(request: TargetPublicArtifactSnapshotRequest): Promise<TargetPublicArtifactSnapshotResult>;
|
|
24
23
|
}
|
|
25
24
|
export interface TargetCommandStreams {
|
|
26
25
|
stderr(message: string): void;
|
|
27
26
|
stdout(message: string): void;
|
|
28
27
|
}
|
|
29
|
-
type SetTargetCommandExitCode = (exitCode: 1 | 2) => void;
|
|
30
|
-
export declare const registerTargetCommands: (program: Command, session: TargetCommandHandlerSession | TargetCommandSessionLoader, streams: TargetCommandStreams, setExitCode: SetTargetCommandExitCode, lookupLoader?: TargetOperationLookupLoader, worldReadinessSession?: (configInput: unknown) => Promise<TargetWorldReadinessSession & TargetWorldClockSession
|
|
31
|
-
export declare const createProductionTargetCommandSession: (config: TargetDefaultConfig) => TargetCommandHandlerSession;
|
|
32
|
-
export declare const registerProductionTargetCommands: (program: Command, streams: TargetCommandStreams, stdin: AsyncIterable<unknown>, setExitCode: SetTargetCommandExitCode) => void;
|
|
28
|
+
export type SetTargetCommandExitCode = (exitCode: 1 | 2) => void;
|
|
29
|
+
export declare const registerTargetCommands: (program: Command, session: TargetCommandHandlerSession | TargetCommandSessionLoader, streams: TargetCommandStreams, setExitCode: SetTargetCommandExitCode, lookupLoader?: TargetOperationLookupLoader, worldReadinessSession?: (configInput: unknown) => Promise<TargetWorldReadinessSession & TargetWorldClockSession>, configFreeCommands?: readonly string[]) => Command;
|
|
33
30
|
export {};
|
|
@@ -1,17 +1,14 @@
|
|
|
1
1
|
import { createCanonicalTargetTopologyReceiptBytes, createCanonicalSelectedTargetReceiptBytes, createTargetTopologyReceiptDigest } from "../target/handles.js";
|
|
2
|
-
import {
|
|
2
|
+
import { createCanonicalTargetPublicArtifactSnapshotResultBytes } from "../target/publicArtifactSnapshot.js";
|
|
3
3
|
import { createCanonicalTargetTopologyActivationReceiptBytes, createTargetTopologyActivationReceiptDigest, parseTargetTopologyActivationReceipt } from "../target/topologyActivation.js";
|
|
4
4
|
import { parseSelectedTargetReceipt, parseTargetTopologyReceipt } from "../target/contracts.js";
|
|
5
5
|
import { TARGET_OPERATION_DISPATCH } from "./targetOperationDispatch.js";
|
|
6
6
|
import { emitCanonicalTargetMutationReceipt, formatCaughtTargetCliError, formatTargetCliError } from "./targetReceiptOutput.js";
|
|
7
7
|
import { readTargetRequestFile, readTargetPublicArtifactSnapshotRequestFile, readTargetTopologyAttestationRequestFile } from "./targetRequestFile.js";
|
|
8
|
-
import {
|
|
9
|
-
import { createProductionTargetLookupLoader, registerTargetOperationLookup } from "./targetLookupCommands.js";
|
|
10
|
-
import { registerContainerBundleCommand } from "./containerBundleCommand.js";
|
|
8
|
+
import { registerTargetOperationLookup } from "./targetLookupCommands.js";
|
|
11
9
|
import { registerTargetWorldClockCommand } from "./targetWorldClockCommand.js";
|
|
12
10
|
import { registerTargetWorldReadinessCommand, } from "./targetWorldReadinessCommand.js";
|
|
13
11
|
import { registerTargetComposedPreparationCommand } from "./targetComposedPreparationCommand.js";
|
|
14
|
-
import { createProductionTargetWorldQuerySession } from "./targetDefaultWorldQueries.js";
|
|
15
12
|
const operations = Object.keys(TARGET_OPERATION_DISPATCH);
|
|
16
13
|
const invoke = async (handlers, request) => {
|
|
17
14
|
const handler = handlers[request.operation];
|
|
@@ -181,7 +178,7 @@ const registerPublicArtifactSnapshot = (target, session, streams, setExitCode) =
|
|
|
181
178
|
return;
|
|
182
179
|
}
|
|
183
180
|
try {
|
|
184
|
-
streams.stdout(
|
|
181
|
+
streams.stdout(createCanonicalTargetPublicArtifactSnapshotResultBytes(await activeSession.snapshotPublicArtifact(request)));
|
|
185
182
|
}
|
|
186
183
|
catch (error) {
|
|
187
184
|
streams.stderr(formatCaughtTargetCliError(error, "Target public artifact snapshot crashed"));
|
|
@@ -189,10 +186,21 @@ const registerPublicArtifactSnapshot = (target, session, streams, setExitCode) =
|
|
|
189
186
|
}
|
|
190
187
|
});
|
|
191
188
|
};
|
|
192
|
-
export const registerTargetCommands = (program, session, streams, setExitCode, lookupLoader, worldReadinessSession) => {
|
|
189
|
+
export const registerTargetCommands = (program, session, streams, setExitCode, lookupLoader, worldReadinessSession, configFreeCommands = []) => {
|
|
193
190
|
const target = program.command("target").description("Execute target-resource operations");
|
|
194
191
|
if (typeof session === "function") {
|
|
195
|
-
|
|
192
|
+
if (configFreeCommands.length === 0) {
|
|
193
|
+
target.requiredOption("--config <config-input>", "Strict target configuration JSON stdin; use -");
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
target.option("--config <config-input>", "Strict target configuration JSON stdin; use -");
|
|
197
|
+
target.hook("preAction", (_command, actionCommand) => {
|
|
198
|
+
if (!configFreeCommands.includes(actionCommand.name())
|
|
199
|
+
&& target.opts().config === undefined) {
|
|
200
|
+
target.error("required option '--config <config-input>' not specified");
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
}
|
|
196
204
|
}
|
|
197
205
|
for (const operation of operations) {
|
|
198
206
|
registerOperation(target, operation, session, streams, setExitCode);
|
|
@@ -217,41 +225,3 @@ export const registerTargetCommands = (program, session, streams, setExitCode, l
|
|
|
217
225
|
registerTargetOperationLookup(target, lookupLoader, streams, setExitCode);
|
|
218
226
|
return target;
|
|
219
227
|
};
|
|
220
|
-
export const createProductionTargetCommandSession = (config) => Object.freeze({
|
|
221
|
-
activateTopology: async (request) => {
|
|
222
|
-
const { activateTargetDefaultTopology } = await import("./targetDefaultHandlers.js");
|
|
223
|
-
return activateTargetDefaultTopology(config, request);
|
|
224
|
-
},
|
|
225
|
-
run: async (invokeHandlers) => {
|
|
226
|
-
const { withTargetDefaultHandlerSession } = await import("./targetDefaultHandlers.js");
|
|
227
|
-
return withTargetDefaultHandlerSession(config, invokeHandlers);
|
|
228
|
-
},
|
|
229
|
-
attestTopology: async (request) => {
|
|
230
|
-
const { attestTargetDefaultTopology } = await import("./targetDefaultHandlers.js");
|
|
231
|
-
return attestTargetDefaultTopology(config, request);
|
|
232
|
-
},
|
|
233
|
-
queryWorldReadiness: async (request) => {
|
|
234
|
-
const { queryTargetDefaultWorldReadiness } = await import("./targetDefaultWorldReadiness.js");
|
|
235
|
-
return queryTargetDefaultWorldReadiness(config, request);
|
|
236
|
-
},
|
|
237
|
-
queryWorldClock: async (request) => {
|
|
238
|
-
const { queryTargetDefaultWorldClock } = await import("./targetDefaultWorldClock.js");
|
|
239
|
-
return queryTargetDefaultWorldClock(config, request);
|
|
240
|
-
},
|
|
241
|
-
snapshotPublicArtifact: async (request) => {
|
|
242
|
-
const { snapshotTargetDefaultPublicArtifact } = await import("./targetDefaultHandlers.js");
|
|
243
|
-
return snapshotTargetDefaultPublicArtifact(config, request);
|
|
244
|
-
}
|
|
245
|
-
});
|
|
246
|
-
export const registerProductionTargetCommands = (program, streams, stdin, setExitCode) => {
|
|
247
|
-
const target = registerTargetCommands(program, async (configInput) => {
|
|
248
|
-
if (configInput !== "-")
|
|
249
|
-
throw new TypeError("Invalid target configuration");
|
|
250
|
-
return createProductionTargetCommandSession(await readTargetDefaultConfigStdin(stdin));
|
|
251
|
-
}, streams, setExitCode, createProductionTargetLookupLoader(stdin), async (configInput) => {
|
|
252
|
-
if (configInput !== "-")
|
|
253
|
-
throw new TypeError("Invalid target configuration");
|
|
254
|
-
return createProductionTargetWorldQuerySession(await readTargetWorldReadinessConfigStdin(stdin));
|
|
255
|
-
});
|
|
256
|
-
registerContainerBundleCommand(target, stdin, streams, setExitCode);
|
|
257
|
-
};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { type PreparedArtifactMapping } from "./targetDefaultConfig.js";
|
|
2
|
+
export declare const TARGET_CONFIG_PREPARED_PLAN_VERSION: "spawnfile.target-config-prepared-plan.v1";
|
|
3
|
+
export declare const readTargetConfigPreparedPlan: (rawPath: string | undefined, evidenceDestination: string) => Promise<readonly PreparedArtifactMapping[] | undefined>;
|