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
package/README.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# Spawnfile
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> Write your agent team once. Compile it for different runtimes.
|
|
4
4
|
|
|
5
5
|
<p align="center">
|
|
6
6
|
<a href="https://www.npmjs.com/package/spawnfile"><img src="https://img.shields.io/npm/v/spawnfile?style=flat-square&color=d4604a&label=npm" alt="npm"></a>
|
|
7
7
|
<a href="https://www.npmjs.com/package/spawnfile"><img src="https://img.shields.io/npm/dm/spawnfile?style=flat-square&color=d4604a" alt="downloads"></a>
|
|
8
|
-
<a href="#
|
|
8
|
+
<a href="#try-it"><img src="https://img.shields.io/node/v/spawnfile?style=flat-square&color=d4604a" alt="node"></a>
|
|
9
9
|
<a href="LICENSE"><img src="https://img.shields.io/npm/l/spawnfile?style=flat-square&color=d4604a" alt="MIT"></a>
|
|
10
10
|
<a href="https://spawnfile.com"><img src="https://img.shields.io/website?url=https%3A%2F%2Fspawnfile.com&style=flat-square&label=spawnfile.com&color=d4604a" alt="website"></a>
|
|
11
11
|
</p>
|
|
@@ -14,195 +14,96 @@
|
|
|
14
14
|
<img src="website/public/new-claw-images.png" alt="Spawnfile compiles one agent source into multiple runtimes" width="420" />
|
|
15
15
|
</p>
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
Describe your agents, give them identities and tools, and keep the whole team in one source project. Spawnfile compiles that project into the configuration and workspaces their runtimes need, then builds and deploys it with Docker.
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
Pairs with [**Moltnet**](https://moltnet.dev) as the first provider for `team.networks[]`, letting compiled agents share declared rooms, DMs, and history across runtimes without Spawnfile injecting its own message router.
|
|
22
|
-
|
|
23
|
-
For a Simfile linked to a Spawnfile, the product entrypoint is owned by
|
|
24
|
-
Simfile:
|
|
25
|
-
|
|
26
|
-
```bash
|
|
27
|
-
simfile run ./Simfile --view
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
That command delegates only organization lifecycle operations to Spawnfile's
|
|
31
|
-
public CLI and versioned receipts. Spawnfile prepares target resources,
|
|
32
|
-
deploys the organization, records the pinned Pi-bridge Moltnet identity,
|
|
33
|
-
exports evidence, and cleans up; it does not carry simulation behavior or
|
|
34
|
-
trigger cognition. The world reaches paused/pristine readiness first, the
|
|
35
|
-
organization starts second, and one attested activation releases independent
|
|
36
|
-
world ticks and organization-owned schedules. A separately manifested
|
|
37
|
-
`simfile.world-decision-claim.v1` capability may extend the base world-sidecar
|
|
38
|
-
ABI without changing it. See
|
|
39
|
-
[`specs/ECOSYSTEM_RUNTIME_BOUNDARIES.md`](specs/ECOSYSTEM_RUNTIME_BOUNDARIES.md)
|
|
40
|
-
for ownership and [`specs/TARGETS.md`](specs/TARGETS.md) for target, auth,
|
|
41
|
-
Moltnet pinning, recovery, and cleanup contracts.
|
|
42
|
-
|
|
43
|
-
## Install
|
|
44
|
-
|
|
45
|
-
```bash
|
|
46
|
-
npm install -g spawnfile
|
|
47
|
-
spawnfile --version
|
|
48
|
-
spawnfile --help
|
|
19
|
+
```text
|
|
20
|
+
Spawnfile + workspace ─→ compile ─→ runtime files
|
|
49
21
|
```
|
|
50
22
|
|
|
51
|
-
|
|
23
|
+
## Try it
|
|
52
24
|
|
|
53
|
-
|
|
25
|
+
Start with one agent. Requires **Node.js 22.19+**; compilation needs no Docker or model credentials.
|
|
54
26
|
|
|
55
27
|
```bash
|
|
56
|
-
|
|
57
|
-
spawnfile
|
|
58
|
-
|
|
59
|
-
spawnfile
|
|
60
|
-
spawnfile
|
|
61
|
-
spawnfile auth sync --profile dev --env-file .env
|
|
62
|
-
spawnfile build --tag my-agent # compile + docker build
|
|
63
|
-
spawnfile up . --context gpu-4090 --detach # build and run on a Docker context
|
|
64
|
-
spawnfile dev up . --auth-profile dev # detached dev loop in .spawn-dev
|
|
65
|
-
spawnfile dev apply . --agent researcher # hot-add/reload one Pi agent
|
|
66
|
-
spawnfile dev activity . --agent researcher # inspect buffered Pi activity events
|
|
67
|
-
spawnfile run --tag my-agent --auth-profile dev --detach
|
|
68
|
-
spawnfile status . --live # inspect the detached deployment
|
|
69
|
-
spawnfile publish . --tag you/my-agent:1.0.0 # compile + build + verify + push
|
|
28
|
+
npm install -g spawnfile
|
|
29
|
+
spawnfile init my-agent
|
|
30
|
+
cd my-agent
|
|
31
|
+
spawnfile validate
|
|
32
|
+
spawnfile compile
|
|
70
33
|
```
|
|
71
34
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
`spawnfile status` is read-only. By default it shows authored and compiled state without Docker, runtime, or Moltnet calls. With `--live`, it reads the selected detached deployment record, inspects the recorded Docker target, runs adapter-owned runtime probes, and checks Moltnet metadata without reading message bodies. Add `--logs` for a redacted Docker log tail, or `--watch` to refresh status continuously. For a remote Docker context where the local record is missing, pass `--context <name>` with `--live` to recover the deployment from Spawnfile container labels.
|
|
75
|
-
|
|
76
|
-
`spawnfile dev` is the source-backed interactive loop. It uses `.spawn-dev/` by default, starts a detached dev deployment with `spawnfile dev up`, and can hot-apply one Daimon runtime agent with `spawnfile dev apply --agent <id>` without restarting the rest of the org. Hot apply recompiles source, copies the selected agent workspace, Daimon config, matching Moltnet node configs, and managed Moltnet server configs into the running container, loads it through the Daimon control endpoint, and starts only that agent's Moltnet bridges when it is new. `spawnfile dev activity` reads the generated Daimon app's bounded activity buffer as JSON lines so operators can see queued wakes, turn starts/completions, runtime event types, output completions, and errors without mixing those diagnostics into Moltnet chat. Running managed Moltnet servers keep their current in-memory room membership until an operator-token `moltnet apply` or server restart reconciles the copied server config.
|
|
35
|
+
`init` creates an OpenClaw project with `IDENTITY.md`, `SOUL.md`, and `AGENTS.md`. `compile` writes runtime configuration, the generated workspace, and container files into `.spawn/`. Read `spawnfile-report.json` there to see how your source was compiled. **The agent is configured, but has not started.**
|
|
77
36
|
|
|
78
|
-
|
|
37
|
+
Edit the Markdown files to define who the agent is and what it should do, then compile again. Keep the source in Git; `.spawn/` is generated and ignored.
|
|
79
38
|
|
|
80
|
-
|
|
39
|
+
## From one agent to a team
|
|
81
40
|
|
|
82
|
-
|
|
83
|
-
an external orchestrator. It takes one absolute request JSON file and one
|
|
84
|
-
strict private configuration object on standard input — never a configuration
|
|
85
|
-
path or inline configuration:
|
|
41
|
+
A team has its own `Spawnfile`, which references the member agent projects. Create its directory with `spawnfile init my-team --team`. Once you have two projects with distinct agent names under `my-team/agents/`, put their references in `my-team/Spawnfile`:
|
|
86
42
|
|
|
87
|
-
```
|
|
88
|
-
|
|
43
|
+
```yaml
|
|
44
|
+
spawnfile_version: "0.1"
|
|
45
|
+
kind: team
|
|
46
|
+
name: research-team
|
|
47
|
+
mode: swarm
|
|
48
|
+
members:
|
|
49
|
+
- id: researcher
|
|
50
|
+
ref: ./agents/researcher
|
|
51
|
+
- id: writer
|
|
52
|
+
ref: ./agents/writer
|
|
89
53
|
```
|
|
90
54
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
For a crash-safe machine caller handoff, project-mode `up --json`, `artifacts export
|
|
94
|
-
--json`, and `down --json` accept `--lifecycle-invocation lci_<stable-id>`. Spawnfile
|
|
95
|
-
binds that id to the exact operation, correlation, and request policy, atomically stores
|
|
96
|
-
the exact JSON bytes after the owner returns and before stdout, and rejects reuse with
|
|
97
|
-
drift. `spawnfile lifecycle lookup <id>` is read-only and returns one versioned state:
|
|
98
|
-
`not_applied`, `pending`, `completed`, or `ambiguous`, without Docker/provider
|
|
99
|
-
inspection. Recovery only resumes an operation when that command verifies exact durable
|
|
100
|
-
evidence that resumption is safe; otherwise it seals `ambiguous` and fails closed.
|
|
101
|
-
It writes no secret values to output or diagnostics. The full verb list,
|
|
102
|
-
request/receipt contract, and exit behavior are in [`specs/TARGETS.md`](specs/TARGETS.md).
|
|
103
|
-
`target lookup_operation` accepts the original mutation request with a minimal
|
|
104
|
-
read-only context config and reports `completed`, `pending`, or `not_applied`
|
|
105
|
-
without calling the target provider or changing its journal.
|
|
106
|
-
|
|
107
|
-
Declare external credentials in `secrets:` and provide values through an ignored env file or the shell environment. `spawnfile auth sync --env-file .env` stores declared model auth and project secrets in a local auth profile; `spawnfile run --env-file .env` can inject the same values directly for a single run. This is the intended pattern for credentials like `GH_TOKEN`, MCP tokens, and provider API keys.
|
|
108
|
-
|
|
109
|
-
## Project structure
|
|
55
|
+
Each member has its own Spawnfile, identity, and runtime. Teams can share instructions and resources, contain nested teams, and declare [Moltnet](https://moltnet.dev) rooms. The [team guide](https://spawnfile.com/guides/teams/) covers the full setup; [examples](examples/) show complete projects.
|
|
110
56
|
|
|
111
|
-
|
|
57
|
+
## What travels with your team
|
|
112
58
|
|
|
113
|
-
**
|
|
59
|
+
- **Agents:** Identity documents, instructions, skills, workspace resources, and each agent’s wake schedule.
|
|
60
|
+
- **Tools and models:** MCP connections, model selection, and declared secret requirements.
|
|
61
|
+
- **Team structure:** Members, nested teams, and shared resources.
|
|
62
|
+
- **Communication:** Declared [Moltnet](https://moltnet.dev) networks and rooms for agents to exchange messages across runtimes.
|
|
63
|
+
- **Deployment:** Runtime configuration, container files, and a capability report built from the same source.
|
|
114
64
|
|
|
115
|
-
|
|
116
|
-
my-agent/
|
|
117
|
-
├── Spawnfile
|
|
118
|
-
├── IDENTITY.md # who the agent is
|
|
119
|
-
├── SOUL.md # tone and personality
|
|
120
|
-
├── AGENTS.md # system prompt
|
|
121
|
-
├── MEMORY.md # long-lived memory
|
|
122
|
-
├── HEARTBEAT.md # periodic prompt for scheduled wakes
|
|
123
|
-
├── skills/
|
|
124
|
-
│ └── web_search/SKILL.md
|
|
125
|
-
└── subagents/
|
|
126
|
-
└── researcher/Spawnfile
|
|
127
|
-
```
|
|
65
|
+
A team declaration alone does not create a conversation or a useful division of work. Give the agents a task, configure their communication, and choose how they wake. Start with the [team guide](https://spawnfile.com/guides/teams/) and [example projects](examples/).
|
|
128
66
|
|
|
129
|
-
|
|
67
|
+
## Run and share it
|
|
130
68
|
|
|
131
|
-
|
|
132
|
-
my-team/
|
|
133
|
-
├── Spawnfile
|
|
134
|
-
├── TEAM.md
|
|
135
|
-
├── shared/skills/...
|
|
136
|
-
└── agents/
|
|
137
|
-
├── orchestrator/Spawnfile
|
|
138
|
-
├── researcher/Spawnfile
|
|
139
|
-
└── writer/Spawnfile
|
|
140
|
-
```
|
|
69
|
+
Once the prompts and configuration are ready:
|
|
141
70
|
|
|
142
|
-
|
|
71
|
+
1. **Provide credentials.** Import an existing subscription login or configure provider credentials with [auth profiles](https://spawnfile.com/guides/docker/). Keep secret values out of Git.
|
|
72
|
+
2. **Build and start.** With Docker available, `spawnfile up . --detach --auth-profile <profile>` compiles, builds, and starts the project. A Docker context can target another machine.
|
|
73
|
+
3. **Check the deployment.** `spawnfile status . --live` probes the running deployment; `spawnfile status .` reads only local declared and compiled state.
|
|
74
|
+
4. **Share an image.** `spawnfile publish` packages the project for an OCI registry so another operator can run it without the source, using their own credentials.
|
|
143
75
|
|
|
144
|
-
|
|
76
|
+
See [container deployment](specs/CONTAINERS.md), [status](specs/STATUS.md), and [image distribution](specs/DISTRIBUTION.md) for complete commands and requirements.
|
|
145
77
|
|
|
146
78
|
## Runtime support
|
|
147
79
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
|
151
|
-
|
|
152
|
-
|
|
|
153
|
-
| PicoClaw | active | | Discord, Telegram, Slack (WhatsApp blocked) |
|
|
154
|
-
| Pi | active | | Embedded org app, Moltnet client config |
|
|
155
|
-
| OpenFang | exploratory | | No active adapter yet |
|
|
156
|
-
| Hermes Agent | exploratory | | No active adapter yet |
|
|
157
|
-
| OpenCode | exploratory | | No active adapter yet |
|
|
158
|
-
|
|
159
|
-
Each adapter maps the portable schema into its native forms. The compiler reports a machine-readable `spawnfile-report.json` with the resolved graph, chosen runtimes, and capability outcomes (`supported`, `degraded`, `unsupported`). See [`specs/RUNTIMES.md`](specs/RUNTIMES.md) for the live matrix and pinned versions, or [`runtimes.yaml`](runtimes.yaml) for the registry source of truth.
|
|
160
|
-
|
|
161
|
-
## Why
|
|
162
|
-
|
|
163
|
-
Autonomous agent runtimes already share a meaningful core: markdown workspace identity, skill folders, MCP, model selection, sandboxing. Today that core is re-authored by hand for each runtime. Spawnfile makes it canonical so one source project can ship to any compatible runtime.
|
|
164
|
-
|
|
165
|
-
## Docs
|
|
80
|
+
| Runtime | Use it for |
|
|
81
|
+
|---|---|
|
|
82
|
+
| **Daimon** | Agents using subscription CLI engines such as Codex and Claude Code, with Moltnet and memory integration. |
|
|
83
|
+
| **OpenClaw** | OpenClaw agents and their native messaging surfaces. The default agent scaffold. |
|
|
84
|
+
| **PicoClaw** | PicoClaw agents and their native messaging surfaces. |
|
|
166
85
|
|
|
167
|
-
|
|
86
|
+
Daimon requires a pinned runtime image matching the compiler contract. The older `pi` adapter remains available for existing projects.
|
|
168
87
|
|
|
169
|
-
|
|
88
|
+
Portability is capability-specific: the compiler reports each feature as **supported**, **degraded**, or **unsupported**. Read that report before switching runtimes. Exact versions live in [runtimes.yaml](runtimes.yaml); the [runtime specification](specs/RUNTIMES.md) describes the adapter model.
|
|
170
89
|
|
|
171
|
-
|
|
172
|
-
- [`specs/SPEC.md`](specs/SPEC.md) — canonical source format
|
|
173
|
-
- [`specs/COMPILER.md`](specs/COMPILER.md) — compiler architecture and adapter contract
|
|
174
|
-
- [`specs/CONTAINERS.md`](specs/CONTAINERS.md) — container compilation
|
|
175
|
-
- [`specs/RUNTIMES.md`](specs/RUNTIMES.md) — runtime registry and version pinning
|
|
176
|
-
- [`specs/SURFACES.md`](specs/SURFACES.md) — messaging surface model
|
|
177
|
-
- [`specs/STATUS.md`](specs/STATUS.md) — static and live operational status
|
|
178
|
-
- [`specs/DISTRIBUTION.md`](specs/DISTRIBUTION.md) — image distribution, publish, and sourceless run
|
|
179
|
-
- [`test/fixtures/`](test/fixtures/) — canonical example projects
|
|
180
|
-
|
|
181
|
-
## From source
|
|
182
|
-
|
|
183
|
-
```bash
|
|
184
|
-
git clone https://github.com/noopolis/spawnfile.git
|
|
185
|
-
cd spawnfile
|
|
186
|
-
nvm use
|
|
187
|
-
npm install
|
|
188
|
-
npm run build
|
|
189
|
-
npm link
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
For local development without linking globally:
|
|
193
|
-
|
|
194
|
-
```bash
|
|
195
|
-
npm run dev -- validate test/fixtures/single-agent
|
|
196
|
-
```
|
|
90
|
+
## Go further
|
|
197
91
|
|
|
198
|
-
|
|
92
|
+
| I want to… | Read |
|
|
93
|
+
|---|---|
|
|
94
|
+
| Understand the source format | [Spawnfile specification](specs/SPEC.md) |
|
|
95
|
+
| Explore complete projects | [Examples](examples/) |
|
|
96
|
+
| Add an adapter or contribute | [Contributing](CONTRIBUTING.md) |
|
|
97
|
+
| Integrate with deployment tooling | [Target and lifecycle contracts](specs/TARGETS.md) |
|
|
98
|
+
| Plan isolated agent training | [Paideia training handoff](specs/TRAINING.md) |
|
|
99
|
+
| Find a detailed contract | [Specification index](specs/INDEX.md) |
|
|
199
100
|
|
|
200
|
-
|
|
101
|
+
Spawnfile is part of [Noopolis](https://github.com/noopolis). [Moltnet](https://moltnet.dev) supplies messaging; [Daimon](https://github.com/noopolis/daimon) runs individual agents; [Simfile](https://simfile.org) builds simulation worlds around organizations. You can use Spawnfile on its own.
|
|
201
102
|
|
|
202
103
|
## License
|
|
203
104
|
|
|
204
|
-
MIT
|
|
105
|
+
[MIT](LICENSE)
|
|
205
106
|
|
|
206
107
|
---
|
|
207
108
|
|
|
208
|
-
**[spawnfile.com](https://spawnfile.com)** · **[
|
|
109
|
+
**[spawnfile.com](https://spawnfile.com)** · **[Examples](examples/)** · **[Contributing](CONTRIBUTING.md)**
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Evidence input types and small pure helpers shared by every check function
|
|
3
3
|
* in checks.ts. Split out purely to keep checks.ts under the repo's 400-line
|
|
4
|
-
* cap (see
|
|
4
|
+
* cap (see the repo CLAUDE.md) — nothing here is
|
|
5
5
|
* a different layer or a different contract, it is checks.ts's own
|
|
6
6
|
* plumbing. No I/O, same as checks.ts itself.
|
|
7
7
|
*/
|
package/dist/auth/importers.d.ts
CHANGED
|
@@ -4,5 +4,15 @@ interface ClaudeCodeImportOptions {
|
|
|
4
4
|
export declare const parseEnvFile: (content: string) => Record<string, string>;
|
|
5
5
|
export declare const importEnvFile: (profileName: string, envFilePath: string) => Promise<import("./types.js").ResolvedAuthProfile>;
|
|
6
6
|
export declare const importCodexAuth: (profileName: string, sourceDirectory?: string) => Promise<import("./types.js").ResolvedAuthProfile>;
|
|
7
|
+
/**
|
|
8
|
+
* Imports a **dedicated** Grok login into a profile.
|
|
9
|
+
*
|
|
10
|
+
* Unlike Codex, the source is always explicit: training rotates the credential
|
|
11
|
+
* it is given, so defaulting to `~/.grok` would let a routine training run
|
|
12
|
+
* invalidate the developer's own desktop session, and the refreshed token
|
|
13
|
+
* would land on container tmpfs rather than back in `~/.grok` (D2). The
|
|
14
|
+
* desktop home is refused outright, by resolved path and through `GROK_HOME`.
|
|
15
|
+
*/
|
|
16
|
+
export declare const importGrokAuth: (profileName: string, sourceDirectory: string | undefined) => Promise<import("./types.js").ResolvedAuthProfile>;
|
|
7
17
|
export declare const importClaudeCodeAuth: (profileName: string, sourceDirectory?: string, options?: ClaudeCodeImportOptions) => Promise<import("./types.js").ResolvedAuthProfile>;
|
|
8
18
|
export {};
|
package/dist/auth/importers.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import os from "node:os";
|
|
3
|
-
import {
|
|
3
|
+
import { fileExists, readUtf8File, writePrivateUtf8File } from "../filesystem/index.js";
|
|
4
4
|
import { SpawnfileError } from "../shared/index.js";
|
|
5
5
|
import { registerImportedAuth, setAuthProfileEnv } from "./profileStore.js";
|
|
6
6
|
const ENV_LINE_PATTERN = /^\s*([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.*)\s*$/;
|
|
@@ -67,7 +67,33 @@ export const importCodexAuth = async (profileName, sourceDirectory) => {
|
|
|
67
67
|
throw new SpawnfileError("validation_error", `Codex auth file does not exist: ${authFilePath}`);
|
|
68
68
|
}
|
|
69
69
|
const { directory, profile } = await registerImportedAuth(profileName, "codex");
|
|
70
|
-
await
|
|
70
|
+
await writePrivateUtf8File(path.join(directory, "auth.json"), await readUtf8File(authFilePath));
|
|
71
|
+
return profile;
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Imports a **dedicated** Grok login into a profile.
|
|
75
|
+
*
|
|
76
|
+
* Unlike Codex, the source is always explicit: training rotates the credential
|
|
77
|
+
* it is given, so defaulting to `~/.grok` would let a routine training run
|
|
78
|
+
* invalidate the developer's own desktop session, and the refreshed token
|
|
79
|
+
* would land on container tmpfs rather than back in `~/.grok` (D2). The
|
|
80
|
+
* desktop home is refused outright, by resolved path and through `GROK_HOME`.
|
|
81
|
+
*/
|
|
82
|
+
export const importGrokAuth = async (profileName, sourceDirectory) => {
|
|
83
|
+
if (!sourceDirectory) {
|
|
84
|
+
throw new SpawnfileError("validation_error", "Grok import requires --from <directory> holding a dedicated training login; training never uses the desktop ~/.grok");
|
|
85
|
+
}
|
|
86
|
+
const resolvedSource = path.resolve(sourceDirectory);
|
|
87
|
+
const desktop = path.resolve(process.env.GROK_HOME ?? path.join(os.homedir(), ".grok"));
|
|
88
|
+
if (resolvedSource === desktop || resolvedSource === path.join(os.homedir(), ".grok")) {
|
|
89
|
+
throw new SpawnfileError("validation_error", `Refusing the desktop Grok home ${resolvedSource}; a training run rotates the credential it imports`);
|
|
90
|
+
}
|
|
91
|
+
const authFilePath = path.join(resolvedSource, "auth.json");
|
|
92
|
+
if (!(await fileExists(authFilePath))) {
|
|
93
|
+
throw new SpawnfileError("validation_error", `Grok auth file does not exist: ${authFilePath}`);
|
|
94
|
+
}
|
|
95
|
+
const { directory, profile } = await registerImportedAuth(profileName, "grok");
|
|
96
|
+
await writePrivateUtf8File(path.join(directory, "auth.json"), await readUtf8File(authFilePath));
|
|
71
97
|
return profile;
|
|
72
98
|
};
|
|
73
99
|
export const importClaudeCodeAuth = async (profileName, sourceDirectory, options = {}) => {
|
|
@@ -87,7 +113,6 @@ export const importClaudeCodeAuth = async (profileName, sourceDirectory, options
|
|
|
87
113
|
throw new SpawnfileError("validation_error", `Claude Code credentials file does not exist: ${credentialsPath} and macOS Keychain service ${CLAUDE_CODE_KEYCHAIN_SERVICE} was unavailable`);
|
|
88
114
|
}
|
|
89
115
|
const { directory, profile } = await registerImportedAuth(profileName, "claude-code");
|
|
90
|
-
await
|
|
91
|
-
await writeUtf8File(path.join(directory, ".credentials.json"), credentialsContent);
|
|
116
|
+
await writePrivateUtf8File(path.join(directory, ".credentials.json"), credentialsContent);
|
|
92
117
|
return profile;
|
|
93
118
|
};
|
package/dist/auth/index.d.ts
CHANGED
|
@@ -10,3 +10,5 @@ export * from "./credentialProvisioningRequest.js";
|
|
|
10
10
|
export * from "./credentialWorldBindings.js";
|
|
11
11
|
export * from "./targetSecretSourceLifecycle.js";
|
|
12
12
|
export * from "./targetSecretSourceResolver.js";
|
|
13
|
+
export { stageTrainingAuth } from "./trainingAuth.js";
|
|
14
|
+
export type { TrainingAuthStageOptions, TrainingAuthProvider } from "./trainingAuth.js";
|
package/dist/auth/index.js
CHANGED
package/dist/auth/paths.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ export declare const resolveAuthHome: () => string;
|
|
|
3
3
|
export declare const resolveProfilesRoot: () => string;
|
|
4
4
|
export declare const resolveProfileDirectory: (profileName: string) => string;
|
|
5
5
|
export declare const resolveProfilePath: (profileName: string) => string;
|
|
6
|
-
export declare const resolveImportedAuthDirectory: (profileName: string, kind: "claude-code" | "codex") => string;
|
|
6
|
+
export declare const resolveImportedAuthDirectory: (profileName: string, kind: "claude-code" | "codex" | "grok") => string;
|
|
7
7
|
export declare const resolveTargetSecretsRoot: () => string;
|
|
8
8
|
export declare const resolveTargetSecretVersionsDirectory: () => string;
|
|
9
9
|
export declare const resolveTargetSecretVersionPath: (versionKey: string) => string;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
-
import {
|
|
3
|
+
import { ensurePrivateDirectory, fileExists, readUtf8File, removeDirectory, writePrivateUtf8File } from "../filesystem/index.js";
|
|
4
4
|
import { SpawnfileError } from "../shared/index.js";
|
|
5
|
-
import { resolveAuthHome, resolveImportedAuthDirectory, resolveProfileDirectory, resolveProfilePath } from "./paths.js";
|
|
5
|
+
import { resolveAuthHome, resolveImportedAuthDirectory, resolveProfileDirectory, resolveProfilePath, resolveProfilesRoot } from "./paths.js";
|
|
6
6
|
const importedAuthEntrySchema = z.object({
|
|
7
7
|
kind: z.enum(["claude-code", "codex"]),
|
|
8
8
|
relativePath: z.string().min(1)
|
|
@@ -68,15 +68,14 @@ export const ensureAuthProfile = async (profileName) => {
|
|
|
68
68
|
if (existing) {
|
|
69
69
|
return existing;
|
|
70
70
|
}
|
|
71
|
-
|
|
72
|
-
await ensureDirectory(profileDirectory);
|
|
73
|
-
await writeUtf8File(resolveProfilePath(profileName), `${JSON.stringify(createEmptyProfile(), null, 2)}\n`);
|
|
74
|
-
return createResolvedAuthProfile(profileName, createEmptyProfile());
|
|
71
|
+
return writeProfile(profileName, createEmptyProfile());
|
|
75
72
|
};
|
|
76
73
|
const writeProfile = async (profileName, profile) => {
|
|
77
74
|
const profileDirectory = resolveProfileDirectory(profileName);
|
|
78
|
-
await
|
|
79
|
-
await
|
|
75
|
+
await ensurePrivateDirectory(resolveAuthHome());
|
|
76
|
+
await ensurePrivateDirectory(resolveProfilesRoot());
|
|
77
|
+
await ensurePrivateDirectory(profileDirectory);
|
|
78
|
+
await writePrivateUtf8File(resolveProfilePath(profileName), `${JSON.stringify(profile, null, 2)}\n`);
|
|
80
79
|
return createResolvedAuthProfile(profileName, profile);
|
|
81
80
|
};
|
|
82
81
|
export const setAuthProfileEnv = async (profileName, env) => {
|
|
@@ -99,8 +98,9 @@ export const setAuthProfileEnv = async (profileName, env) => {
|
|
|
99
98
|
export const registerImportedAuth = async (profileName, kind) => {
|
|
100
99
|
const current = (await loadAuthProfile(profileName)) ?? (await ensureAuthProfile(profileName));
|
|
101
100
|
const importDirectory = resolveImportedAuthDirectory(profileName, kind);
|
|
101
|
+
await ensurePrivateDirectory(path.dirname(importDirectory));
|
|
102
102
|
await removeDirectory(importDirectory);
|
|
103
|
-
await
|
|
103
|
+
await ensurePrivateDirectory(importDirectory);
|
|
104
104
|
const nextProfile = {
|
|
105
105
|
env: { ...current.env },
|
|
106
106
|
imports: {
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type BigIntStats } from "node:fs";
|
|
2
|
+
export type DirectoryIdentity = Readonly<{
|
|
3
|
+
birthtimeNs: bigint;
|
|
4
|
+
dev: bigint;
|
|
5
|
+
ino: bigint;
|
|
6
|
+
mode: bigint;
|
|
7
|
+
uid: bigint;
|
|
8
|
+
}>;
|
|
9
|
+
export type FileIdentity = Readonly<{
|
|
10
|
+
birthtimeNs: bigint;
|
|
11
|
+
ctimeNs: bigint;
|
|
12
|
+
dev: bigint;
|
|
13
|
+
ino: bigint;
|
|
14
|
+
mode: bigint;
|
|
15
|
+
nlink: bigint;
|
|
16
|
+
size: number;
|
|
17
|
+
uid: bigint;
|
|
18
|
+
}>;
|
|
19
|
+
/** Validates one mode-`0700` owner-held directory and reduces it to its identity. */
|
|
20
|
+
export declare const directoryIdentityOf: (info: BigIntStats, owner: number) => DirectoryIdentity;
|
|
21
|
+
/** Validates one mode-`0600` owner-held regular file and reduces it to its identity. */
|
|
22
|
+
export declare const fileIdentityOf: (info: BigIntStats, owner: number, links: readonly number[], maxBytes: number, zero?: boolean) => FileIdentity;
|
|
23
|
+
/**
|
|
24
|
+
* Same directory node. Never compares ctime: the publisher mutates the leaf
|
|
25
|
+
* directory's ctime itself every time it links or unlinks an election name.
|
|
26
|
+
*/
|
|
27
|
+
export declare const sameDirectory: (left: DirectoryIdentity, right: DirectoryIdentity) => boolean;
|
|
28
|
+
/** Same file, unchanged in every observable field including ctime and size. */
|
|
29
|
+
export declare const sameFileExact: (left: FileIdentity, right: FileIdentity) => boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Same file node, allowing the size and ctime to move. This is the growing
|
|
32
|
+
* final: an identical writer may legitimately append the rest of the record
|
|
33
|
+
* between two observations, which changes both.
|
|
34
|
+
*/
|
|
35
|
+
export declare const sameFileNode: (left: FileIdentity, right: FileIdentity) => boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Same inode, allowing the link count and ctime to move. This is the zero-byte
|
|
38
|
+
* token or claim while an identical publisher links or unlinks the other name.
|
|
39
|
+
*/
|
|
40
|
+
export declare const sameFileInode: (left: FileIdentity, right: FileIdentity) => boolean;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { TARGET_SECRET_SOURCE_ERROR } from "./targetSecretSourceRecordCommon.js";
|
|
2
|
+
const fail = () => { throw new Error(TARGET_SECRET_SOURCE_ERROR); };
|
|
3
|
+
/** Validates one mode-`0700` owner-held directory and reduces it to its identity. */
|
|
4
|
+
export const directoryIdentityOf = (info, owner) => {
|
|
5
|
+
if (!info.isDirectory() || info.isSymbolicLink() || info.uid !== BigInt(owner) || (info.mode & 4095n) !== 448n)
|
|
6
|
+
fail();
|
|
7
|
+
return { birthtimeNs: info.birthtimeNs, dev: info.dev, ino: info.ino, mode: info.mode, uid: info.uid };
|
|
8
|
+
};
|
|
9
|
+
/** Validates one mode-`0600` owner-held regular file and reduces it to its identity. */
|
|
10
|
+
export const fileIdentityOf = (info, owner, links, maxBytes, zero = false) => {
|
|
11
|
+
if (!info.isFile() || info.isSymbolicLink() || info.uid !== BigInt(owner)
|
|
12
|
+
|| !links.some((link) => info.nlink === BigInt(link)) || (info.mode & 4095n) !== 384n
|
|
13
|
+
|| info.size < 0n || info.size > BigInt(maxBytes) || (zero && info.size !== 0n))
|
|
14
|
+
fail();
|
|
15
|
+
return {
|
|
16
|
+
birthtimeNs: info.birthtimeNs, ctimeNs: info.ctimeNs, dev: info.dev, ino: info.ino,
|
|
17
|
+
mode: info.mode, nlink: info.nlink, size: Number(info.size), uid: info.uid
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Same directory node. Never compares ctime: the publisher mutates the leaf
|
|
22
|
+
* directory's ctime itself every time it links or unlinks an election name.
|
|
23
|
+
*/
|
|
24
|
+
export const sameDirectory = (left, right) => left.birthtimeNs === right.birthtimeNs && left.dev === right.dev && left.ino === right.ino
|
|
25
|
+
&& left.mode === right.mode && left.uid === right.uid;
|
|
26
|
+
/** Same file, unchanged in every observable field including ctime and size. */
|
|
27
|
+
export const sameFileExact = (left, right) => left.birthtimeNs === right.birthtimeNs && left.ctimeNs === right.ctimeNs && left.dev === right.dev
|
|
28
|
+
&& left.ino === right.ino && left.mode === right.mode && left.nlink === right.nlink
|
|
29
|
+
&& left.size === right.size && left.uid === right.uid;
|
|
30
|
+
/**
|
|
31
|
+
* Same file node, allowing the size and ctime to move. This is the growing
|
|
32
|
+
* final: an identical writer may legitimately append the rest of the record
|
|
33
|
+
* between two observations, which changes both.
|
|
34
|
+
*/
|
|
35
|
+
export const sameFileNode = (left, right) => left.birthtimeNs === right.birthtimeNs && left.dev === right.dev && left.ino === right.ino
|
|
36
|
+
&& left.mode === right.mode && left.nlink === right.nlink && left.uid === right.uid;
|
|
37
|
+
/**
|
|
38
|
+
* Same inode, allowing the link count and ctime to move. This is the zero-byte
|
|
39
|
+
* token or claim while an identical publisher links or unlinks the other name.
|
|
40
|
+
*/
|
|
41
|
+
export const sameFileInode = (left, right) => left.birthtimeNs === right.birthtimeNs && left.dev === right.dev && left.ino === right.ino
|
|
42
|
+
&& left.mode === right.mode && left.size === right.size && left.uid === right.uid;
|
|
@@ -6,6 +6,8 @@ export interface TargetSecretSourceFsPublishInput {
|
|
|
6
6
|
readonly private_metadata: Pick<TargetSecretSourcePrivateVersionMetadata, "publication_handle" | "source_version_handle">;
|
|
7
7
|
}
|
|
8
8
|
export interface TargetSecretSourceFsPublishOptions {
|
|
9
|
+
readonly contentionForTest?: (reason: string, attempt: number) => void;
|
|
10
|
+
readonly errorForTest?: (error: unknown) => void;
|
|
9
11
|
readonly hookForTest?: (phase: TargetSecretSourceFsPublishPhase, path: string) => Promise<void> | void;
|
|
10
12
|
readonly maxWriteBytesForTest?: number;
|
|
11
13
|
}
|
|
@@ -13,6 +13,7 @@ export const initializeTargetSecretSourceFsPublish = async (options = {}) => {
|
|
|
13
13
|
resolveTargetSecretsRoot(),
|
|
14
14
|
resolveTargetSecretVersionsDirectory()
|
|
15
15
|
],
|
|
16
|
+
contentionForTest: options.contentionForTest,
|
|
16
17
|
hookForTest: options.hookForTest,
|
|
17
18
|
maxWriteBytesForTest: options.maxWriteBytesForTest
|
|
18
19
|
});
|
|
@@ -41,7 +42,8 @@ export const initializeTargetSecretSourceFsPublish = async (options = {}) => {
|
|
|
41
42
|
}
|
|
42
43
|
});
|
|
43
44
|
}
|
|
44
|
-
catch {
|
|
45
|
+
catch (error) {
|
|
46
|
+
options.errorForTest?.(error);
|
|
45
47
|
fail();
|
|
46
48
|
}
|
|
47
49
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type TargetSecretSourceFsPublishImmutablePhase = "after_token_create" | "after_claim_link" | "after_claim_snapshot" | "after_mismatch_snapshot" | "after_exact_token_snapshot" | "after_final_create" | "after_partial_write" | "after_file_sync" | "before_directory_sync" | "after_directory_sync" | "after_token_cleanup" | "after_claim_cleanup";
|
|
1
|
+
export type TargetSecretSourceFsPublishImmutablePhase = "after_token_create" | "after_claim_link" | "after_claim_snapshot" | "after_mismatch_snapshot" | "after_exact_token_snapshot" | "after_final_create" | "after_partial_write" | "after_file_sync" | "before_directory_sync" | "after_directory_sync" | "after_token_cleanup" | "after_claim_cleanup" | "after_zero_lstat" | "after_final_lstat" | "after_token_open" | "after_token_sync" | "after_final_open" | "before_unlink_exact" | "before_contention_retry";
|
|
2
2
|
export interface TargetSecretSourceFsPublishImmutableInput {
|
|
3
3
|
readonly bytes: Uint8Array;
|
|
4
4
|
readonly final_path: string;
|
|
@@ -7,6 +7,7 @@ export interface TargetSecretSourceFsPublishImmutableInput {
|
|
|
7
7
|
}
|
|
8
8
|
export interface TargetSecretSourceFsPublishImmutableOptions {
|
|
9
9
|
readonly directory_chain: readonly string[];
|
|
10
|
+
readonly contentionForTest?: (reason: string, attempt: number) => void;
|
|
10
11
|
readonly hookForTest?: (phase: TargetSecretSourceFsPublishImmutablePhase, path: string) => Promise<void> | void;
|
|
11
12
|
readonly maxWriteBytesForTest?: number;
|
|
12
13
|
}
|