spawnfile 0.1.17 → 0.1.18
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 +1 -1
- package/dist/auth/importers.js +21 -5
- package/dist/auth/index.d.ts +1 -0
- package/dist/auth/index.js +1 -0
- package/dist/auth/profileStore.js +4 -1
- package/dist/auth/trainingGrokWriteback.d.ts +4 -0
- package/dist/auth/trainingGrokWriteback.js +119 -0
- package/dist/auth/trainingGrokWritebackLock.d.ts +5 -0
- package/dist/auth/trainingGrokWritebackLock.js +56 -0
- package/dist/cli/authCommands.js +9 -5
- package/dist/cli/compileBuildCommands.js +4 -0
- package/dist/cli/devCommands.js +4 -2
- package/dist/cli/downCommand.d.ts +2 -0
- package/dist/cli/downCommand.js +3 -0
- package/dist/cli/envFileOption.d.ts +18 -0
- package/dist/cli/envFileOption.js +20 -0
- package/dist/cli/lifecycleCommands.d.ts +1 -1
- package/dist/cli/lifecycleCommands.js +3 -1
- package/dist/cli/lifecyclePlan.d.ts +1 -0
- package/dist/cli/lifecyclePlan.js +2 -0
- package/dist/cli/paideiaDelegation.d.ts +2 -1
- package/dist/cli/paideiaDelegation.js +5 -4
- package/dist/cli/recordCommands.d.ts +17 -0
- package/dist/cli/recordCommands.js +43 -0
- package/dist/cli/releaseCommand.d.ts +6 -0
- package/dist/cli/releaseCommand.js +91 -0
- package/dist/cli/runCli.d.ts +7 -1
- package/dist/cli/runCli.js +11 -6
- package/dist/cli/runPublishCommands.js +5 -3
- package/dist/cli/trainCommand.js +73 -20
- package/dist/cli/upCommand.js +5 -1
- package/dist/cli/volumeCommands.d.ts +8 -0
- package/dist/cli/volumeCommands.js +53 -0
- package/dist/compiler/agentNodeMerge.js +3 -2
- package/dist/compiler/buildCompilePlan.js +4 -0
- package/dist/compiler/buildCompilePlanAgent.js +3 -1
- package/dist/compiler/buildCompilePlanTraversal.js +2 -0
- package/dist/compiler/buildCompilePlanTraversalHelpers.d.ts +2 -2
- package/dist/compiler/buildCompilePlanTraversalHelpers.js +4 -3
- package/dist/compiler/buildProject.d.ts +10 -0
- package/dist/compiler/buildProject.js +14 -2
- package/dist/compiler/cleanCompileOutput.d.ts +2 -0
- package/dist/compiler/cleanCompileOutput.js +14 -0
- package/dist/compiler/compilePlanHelpers.js +2 -0
- package/dist/compiler/compileProject.d.ts +10 -0
- package/dist/compiler/compileProject.js +29 -3
- package/dist/compiler/containerArtifactSummaries.js +1 -0
- package/dist/compiler/containerArtifacts.d.ts +4 -4
- package/dist/compiler/containerArtifacts.js +18 -34
- package/dist/compiler/containerArtifactsPlans.js +7 -0
- package/dist/compiler/containerArtifactsTypes.d.ts +7 -0
- package/dist/compiler/containerDaimonBrokerRender.d.ts +3 -1
- package/dist/compiler/containerDaimonBrokerRender.js +6 -3
- package/dist/compiler/containerDaimonGrokTaskClock.d.ts +5 -0
- package/dist/compiler/containerDaimonGrokTaskClock.js +29 -0
- package/dist/compiler/containerDaimonGrokWorkerProvisioning.d.ts +1 -1
- package/dist/compiler/containerDaimonGrokWorkerProvisioning.js +38 -16
- package/dist/compiler/containerDaimonGrokWorkerRender.d.ts +33 -8
- package/dist/compiler/containerDaimonGrokWorkerRender.js +18 -5
- package/dist/compiler/containerDaimonOwnershipGuardRender.d.ts +14 -1
- package/dist/compiler/containerDaimonOwnershipGuardRender.js +15 -2
- package/dist/compiler/containerDaimonUidEntrypointRender.js +6 -12
- package/dist/compiler/containerTargetResources.d.ts +10 -0
- package/dist/compiler/containerTargetResources.js +21 -13
- package/dist/compiler/containerWorkspaceResourceRender.js +4 -1
- package/dist/compiler/index.d.ts +2 -0
- package/dist/compiler/index.js +2 -0
- package/dist/compiler/mcpPlaceholders.d.ts +11 -0
- package/dist/compiler/mcpPlaceholders.js +58 -0
- package/dist/compiler/mcpServerInheritance.d.ts +18 -0
- package/dist/compiler/mcpServerInheritance.js +43 -0
- package/dist/compiler/moltnetArtifactTypes.d.ts +1 -0
- package/dist/compiler/moltnetArtifacts.js +1 -0
- package/dist/compiler/preflightCompilePlan.d.ts +9 -0
- package/dist/compiler/preflightCompilePlan.js +38 -0
- package/dist/compiler/recordingAgentFacts.d.ts +4 -0
- package/dist/compiler/recordingAgentFacts.js +35 -0
- package/dist/compiler/recordingCapability.d.ts +4 -0
- package/dist/compiler/recordingCapability.js +22 -0
- package/dist/compiler/recordingReport.d.ts +4 -0
- package/dist/compiler/recordingReport.js +18 -0
- package/dist/compiler/runProject.d.ts +2 -1
- package/dist/compiler/runProject.js +2 -0
- package/dist/compiler/surfaces.d.ts +1 -2
- package/dist/compiler/surfaces.js +0 -1
- package/dist/compiler/syncProjectAuth.js +2 -1
- package/dist/compiler/training/broker/clockProbe.d.ts +6 -0
- package/dist/compiler/training/broker/clockProbe.js +27 -0
- package/dist/compiler/training/broker/declaration.d.ts +4 -2
- package/dist/compiler/training/broker/declaration.js +4 -2
- package/dist/compiler/training/broker/entrypoint.js +33 -18
- package/dist/compiler/training/broker/evaluatorSecrets.d.ts +2 -0
- package/dist/compiler/training/broker/evaluatorSecrets.js +60 -0
- package/dist/compiler/training/broker/index.d.ts +3 -2
- package/dist/compiler/training/broker/index.js +3 -2
- package/dist/compiler/training/broker/main.js +1 -1
- package/dist/compiler/training/broker/paths.d.ts +96 -56
- package/dist/compiler/training/broker/paths.js +97 -89
- package/dist/compiler/training/broker/processes.d.ts +9 -0
- package/dist/compiler/training/broker/processes.js +4 -1
- package/dist/compiler/training/broker/projection.d.ts +3 -2
- package/dist/compiler/training/broker/projection.js +21 -9
- package/dist/compiler/training/broker/provisioning.d.ts +6 -15
- package/dist/compiler/training/broker/provisioning.js +71 -53
- package/dist/compiler/training/broker/registration.d.ts +3 -1
- package/dist/compiler/training/broker/registration.js +29 -21
- package/dist/compiler/training/broker/reset.d.ts +9 -0
- package/dist/compiler/training/broker/reset.js +71 -0
- package/dist/compiler/training/broker/runtime.d.ts +10 -13
- package/dist/compiler/training/broker/runtime.js +69 -115
- package/dist/compiler/training/broker/supervisor.d.ts +10 -11
- package/dist/compiler/training/broker/supervisor.js +22 -23
- package/dist/compiler/training/broker/taskClock.d.ts +5 -0
- package/dist/compiler/training/broker/taskClock.js +41 -0
- package/dist/compiler/training/compiledAgent.d.ts +21 -0
- package/dist/compiler/training/compiledAgent.js +62 -0
- package/dist/compiler/training/container/contract.d.ts +23 -0
- package/dist/compiler/training/container/contract.js +23 -5
- package/dist/compiler/training/container/evaluators.d.ts +48 -0
- package/dist/compiler/training/container/evaluators.js +50 -0
- package/dist/compiler/training/container/grokWriteback.d.ts +8 -0
- package/dist/compiler/training/container/grokWriteback.js +26 -0
- package/dist/compiler/training/container/index.d.ts +2 -1
- package/dist/compiler/training/container/index.js +2 -1
- package/dist/compiler/training/container/launch.d.ts +3 -0
- package/dist/compiler/training/container/launch.js +119 -28
- package/dist/compiler/training/container/nativeSlots.d.ts +14 -0
- package/dist/compiler/training/container/nativeSlots.js +13 -0
- package/dist/compiler/training/container/outputCopy.d.ts +2 -0
- package/dist/compiler/training/container/outputCopy.js +72 -0
- package/dist/compiler/training/container/outputVolume.d.ts +27 -0
- package/dist/compiler/training/container/outputVolume.js +161 -0
- package/dist/compiler/training/container/prepare.d.ts +3 -1
- package/dist/compiler/training/container/prepare.js +57 -12
- package/dist/compiler/training/container/security.d.ts +5 -3
- package/dist/compiler/training/container/security.js +15 -5
- package/dist/compiler/training/container/subjectIsolation.d.ts +5 -0
- package/dist/compiler/training/container/subjectIsolation.js +15 -0
- package/dist/compiler/training/context.d.ts +8 -0
- package/dist/compiler/training/context.js +12 -12
- package/dist/compiler/training/contract.d.ts +2 -0
- package/dist/compiler/training/contract.js +2 -0
- package/dist/compiler/training/execution.d.ts +417 -0
- package/dist/compiler/training/execution.js +160 -0
- package/dist/compiler/training/index.d.ts +8 -0
- package/dist/compiler/training/index.js +7 -0
- package/dist/compiler/training/moments.d.ts +80 -0
- package/dist/compiler/training/moments.js +118 -0
- package/dist/compiler/training/output.d.ts +2 -0
- package/dist/compiler/training/output.js +20 -0
- package/dist/compiler/training/plan/contract.d.ts +287 -0
- package/dist/compiler/training/plan/contract.js +49 -0
- package/dist/compiler/training/plan/index.d.ts +5 -0
- package/dist/compiler/training/plan/index.js +4 -0
- package/dist/compiler/training/plan/load.d.ts +9 -0
- package/dist/compiler/training/plan/load.js +153 -0
- package/dist/compiler/training/plan/references.d.ts +19 -0
- package/dist/compiler/training/plan/references.js +57 -0
- package/dist/compiler/training/plan/resolve.d.ts +4 -0
- package/dist/compiler/training/plan/resolve.js +73 -0
- package/dist/compiler/training/plan/targets.d.ts +11 -0
- package/dist/compiler/training/plan/targets.js +71 -0
- package/dist/compiler/training/plan/types.d.ts +36 -0
- package/dist/compiler/training/plan/types.js +1 -0
- package/dist/compiler/training/preparation/assets/Dockerfile +13 -2
- package/dist/compiler/training/preparation/assets/package-lock.json +2 -2
- package/dist/compiler/training/preparation/broker.d.ts +3 -3
- package/dist/compiler/training/preparation/broker.js +6 -4
- package/dist/compiler/training/preparation/contract.d.ts +27 -2
- package/dist/compiler/training/preparation/contract.js +23 -4
- package/dist/compiler/training/preparation/files.d.ts +5 -1
- package/dist/compiler/training/preparation/files.js +76 -15
- package/dist/compiler/training/preparation/image.js +9 -4
- package/dist/compiler/training/preparation/inputs.d.ts +1 -0
- package/dist/compiler/training/preparation/inputs.js +18 -10
- package/dist/compiler/training/preparation/prepare.d.ts +5 -0
- package/dist/compiler/training/preparation/prepare.js +66 -29
- package/dist/compiler/training/preparation/scratch.d.ts +6 -17
- package/dist/compiler/training/preparation/scratch.js +89 -23
- package/dist/compiler/training/repair/contract.d.ts +338 -4
- package/dist/compiler/training/repair/contract.js +2 -0
- package/dist/compiler/training/repair/index.d.ts +1 -1
- package/dist/compiler/training/repair/index.js +1 -1
- package/dist/compiler/training/repair/prepare.d.ts +155 -3
- package/dist/compiler/training/repair/prepare.js +6 -2
- package/dist/compiler/training/repair/witness.d.ts +152 -3
- package/dist/compiler/training/repair/witness.js +8 -2
- package/dist/compiler/training/resolution.d.ts +25 -0
- package/dist/compiler/training/resolution.js +69 -0
- package/dist/compiler/training/rewind/contract.d.ts +321 -0
- package/dist/compiler/training/rewind/contract.js +39 -0
- package/dist/compiler/training/rewind/deployedResource.d.ts +22 -0
- package/dist/compiler/training/rewind/deployedResource.js +19 -0
- package/dist/compiler/training/rewind/feed.d.ts +12 -0
- package/dist/compiler/training/rewind/feed.js +182 -0
- package/dist/compiler/training/rewind/feedContent.d.ts +6 -0
- package/dist/compiler/training/rewind/feedContent.js +38 -0
- package/dist/compiler/training/rewind/git.d.ts +8 -0
- package/dist/compiler/training/rewind/git.js +159 -0
- package/dist/compiler/training/rewind/gitArchive.d.ts +2 -0
- package/dist/compiler/training/rewind/gitArchive.js +7 -0
- package/dist/compiler/training/rewind/gitHistory.d.ts +3 -0
- package/dist/compiler/training/rewind/gitHistory.js +55 -0
- package/dist/compiler/training/rewind/gitProcess.d.ts +19 -0
- package/dist/compiler/training/rewind/gitProcess.js +81 -0
- package/dist/compiler/training/rewind/gitTree.d.ts +14 -0
- package/dist/compiler/training/rewind/gitTree.js +90 -0
- package/dist/compiler/training/rewind/history.d.ts +28 -0
- package/dist/compiler/training/rewind/history.js +239 -0
- package/dist/compiler/training/rewind/index.d.ts +18 -0
- package/dist/compiler/training/rewind/index.js +15 -0
- package/dist/compiler/training/rewind/inputs.d.ts +9 -0
- package/dist/compiler/training/rewind/inputs.js +67 -0
- package/dist/compiler/training/rewind/instant.d.ts +4 -0
- package/dist/compiler/training/rewind/instant.js +24 -0
- package/dist/compiler/training/rewind/leakCheck.d.ts +10 -0
- package/dist/compiler/training/rewind/leakCheck.js +56 -0
- package/dist/compiler/training/rewind/leakFeed.d.ts +5 -0
- package/dist/compiler/training/rewind/leakFeed.js +25 -0
- package/dist/compiler/training/rewind/leakFiles.d.ts +10 -0
- package/dist/compiler/training/rewind/leakFiles.js +106 -0
- package/dist/compiler/training/rewind/leakGit.d.ts +3 -0
- package/dist/compiler/training/rewind/leakGit.js +78 -0
- package/dist/compiler/training/rewind/leakGitPayload.d.ts +4 -0
- package/dist/compiler/training/rewind/leakGitPayload.js +57 -0
- package/dist/compiler/training/rewind/leakInputs.d.ts +7 -0
- package/dist/compiler/training/rewind/leakInputs.js +135 -0
- package/dist/compiler/training/rewind/leakLayout.d.ts +2 -0
- package/dist/compiler/training/rewind/leakLayout.js +17 -0
- package/dist/compiler/training/rewind/leakProvenance.d.ts +3 -0
- package/dist/compiler/training/rewind/leakProvenance.js +88 -0
- package/dist/compiler/training/rewind/materialize.d.ts +136 -0
- package/dist/compiler/training/rewind/materialize.js +212 -0
- package/dist/compiler/training/rewind/memory.d.ts +10 -0
- package/dist/compiler/training/rewind/memory.js +84 -0
- package/dist/compiler/training/rewind/memorySchemas.d.ts +87 -0
- package/dist/compiler/training/rewind/memorySchemas.js +50 -0
- package/dist/compiler/training/rewind/moltnet.d.ts +2 -0
- package/dist/compiler/training/rewind/moltnet.js +54 -0
- package/dist/compiler/training/rewind/moltnetJson.d.ts +13 -0
- package/dist/compiler/training/rewind/moltnetJson.js +180 -0
- package/dist/compiler/training/rewind/moltnetSchemas.d.ts +1226 -0
- package/dist/compiler/training/rewind/moltnetSchemas.js +75 -0
- package/dist/compiler/training/rewind/moltnetSqlite.d.ts +31 -0
- package/dist/compiler/training/rewind/moltnetSqlite.js +192 -0
- package/dist/compiler/training/rewind/moltnetSqliteData.d.ts +10 -0
- package/dist/compiler/training/rewind/moltnetSqliteData.js +113 -0
- package/dist/compiler/training/rewind/recordInput.d.ts +40 -0
- package/dist/compiler/training/rewind/recordInput.js +49 -0
- package/dist/compiler/training/rewind/recordedBundle.d.ts +4 -0
- package/dist/compiler/training/rewind/recordedBundle.js +58 -0
- package/dist/compiler/training/rewind/recordedCommit.d.ts +2 -0
- package/dist/compiler/training/rewind/recordedCommit.js +10 -0
- package/dist/compiler/training/rewind/select.d.ts +18 -0
- package/dist/compiler/training/rewind/select.js +64 -0
- package/dist/compiler/training/rewind/snapshotManifest.d.ts +42 -0
- package/dist/compiler/training/rewind/snapshotManifest.js +134 -0
- package/dist/compiler/training/rewind/taskClock.d.ts +12 -0
- package/dist/compiler/training/rewind/taskClock.js +40 -0
- package/dist/compiler/training/rewind/timestamps.d.ts +4 -0
- package/dist/compiler/training/rewind/timestamps.js +26 -0
- package/dist/compiler/training/rewind/types.d.ts +43 -0
- package/dist/compiler/training/rewind/types.js +1 -0
- package/dist/compiler/training/rewind/volumes.d.ts +12 -0
- package/dist/compiler/training/rewind/volumes.js +58 -0
- package/dist/compiler/training/selection.d.ts +7 -0
- package/dist/compiler/training/selection.js +15 -0
- package/dist/compiler/types.d.ts +6 -3
- package/dist/compiler/upProject.d.ts +1 -0
- package/dist/compiler/upProject.js +21 -5
- package/dist/compiler/workspaceBundleArtifacts.d.ts +16 -1
- package/dist/compiler/workspaceBundleArtifacts.js +69 -20
- package/dist/compiler/workspaceBundleCache.d.ts +23 -0
- package/dist/compiler/workspaceBundleCache.js +79 -0
- package/dist/compiler/workspaceBundleDependencies.d.ts +21 -0
- package/dist/compiler/workspaceBundleDependencies.js +122 -0
- package/dist/compiler/workspaceBundleFiles.d.ts +51 -0
- package/dist/compiler/workspaceBundleFiles.js +251 -0
- package/dist/compiler/workspaceBundleGenerated.d.ts +25 -0
- package/dist/compiler/workspaceBundleGenerated.js +103 -0
- package/dist/compiler/workspaceBundleGit.d.ts +64 -0
- package/dist/compiler/workspaceBundleGit.js +154 -0
- package/dist/compiler/workspaceBundleKey.d.ts +34 -0
- package/dist/compiler/workspaceBundleKey.js +17 -0
- package/dist/compiler/workspaceBundleResolve.d.ts +56 -0
- package/dist/compiler/workspaceBundleResolve.js +144 -0
- package/dist/compiler/workspaceBundleRun.d.ts +41 -0
- package/dist/compiler/workspaceBundleRun.js +79 -0
- package/dist/compiler/workspaceBundleTar.d.ts +47 -0
- package/dist/compiler/workspaceBundleTar.js +140 -0
- package/dist/compiler/workspaceBundleTree.d.ts +15 -0
- package/dist/compiler/workspaceBundleTree.js +58 -0
- package/dist/compiler/workspaceGitFetch.d.ts +41 -0
- package/dist/compiler/workspaceGitFetch.js +155 -0
- package/dist/compiler/workspaceGitPins.d.ts +33 -0
- package/dist/compiler/workspaceGitPins.js +127 -0
- package/dist/compiler/workspaceResources.d.ts +5 -1
- package/dist/compiler/workspaceResources.js +32 -5
- package/dist/deployment/activation.d.ts +3 -0
- package/dist/deployment/activation.js +12 -0
- package/dist/deployment/canaryCutover.d.ts +1 -1
- package/dist/deployment/candidateRecording.d.ts +8 -0
- package/dist/deployment/candidateRecording.js +22 -0
- package/dist/deployment/dockerManager.d.ts +5 -3
- package/dist/deployment/dockerManager.js +12 -2
- package/dist/deployment/downDeployment.d.ts +2 -0
- package/dist/deployment/downDeployment.js +6 -2
- package/dist/deployment/homeStore.d.ts +9 -1
- package/dist/deployment/homeStore.js +16 -53
- package/dist/deployment/index.d.ts +6 -0
- package/dist/deployment/index.js +6 -0
- package/dist/deployment/pidLock.d.ts +25 -0
- package/dist/deployment/pidLock.js +81 -0
- package/dist/deployment/record.d.ts +85 -1
- package/dist/deployment/record.js +11 -5
- package/dist/deployment/recordPublication.d.ts +15 -0
- package/dist/deployment/recordPublication.js +76 -0
- package/dist/deployment/recordedMemoryRetention.d.ts +18 -0
- package/dist/deployment/recordedMemoryRetention.js +27 -0
- package/dist/deployment/resourceLog.d.ts +140 -0
- package/dist/deployment/resourceLog.js +78 -0
- package/dist/distribution/buildDistributionReport.d.ts +3 -0
- package/dist/distribution/buildDistributionReport.js +5 -0
- package/dist/distribution/consumeImage.d.ts +3 -0
- package/dist/distribution/consumeImage.js +23 -31
- package/dist/distribution/consumeImageLifecycle.d.ts +4 -1
- package/dist/distribution/consumeImageLifecycle.js +14 -3
- package/dist/distribution/consumeImageSupport.d.ts +7 -0
- package/dist/distribution/consumeImageSupport.js +25 -0
- package/dist/distribution/distributionReportSchema.d.ts +47 -0
- package/dist/distribution/distributionReportSchema.js +20 -0
- package/dist/distribution/renderImageInterface.js +1 -1
- package/dist/distribution/types.d.ts +15 -0
- package/dist/filesystem/durableWrite.d.ts +10 -0
- package/dist/filesystem/durableWrite.js +87 -0
- package/dist/filesystem/index.d.ts +2 -0
- package/dist/filesystem/index.js +2 -0
- package/dist/filesystem/retainedJsonl.d.ts +23 -0
- package/dist/filesystem/retainedJsonl.js +123 -0
- package/dist/manifest/commandSchemas.d.ts +5 -0
- package/dist/manifest/commandSchemas.js +5 -0
- package/dist/manifest/executionSchemas.d.ts +20 -0
- package/dist/manifest/executionSchemas.js +13 -3
- package/dist/manifest/index.d.ts +2 -0
- package/dist/manifest/index.js +2 -0
- package/dist/manifest/loadManifest.js +3 -26
- package/dist/manifest/mcpSchemas.d.ts +61 -0
- package/dist/manifest/mcpSchemas.js +57 -11
- package/dist/manifest/memorySchemas.d.ts +1 -1
- package/dist/manifest/memorySchemas.js +1 -1
- package/dist/manifest/parseManifest.d.ts +7 -0
- package/dist/manifest/parseManifest.js +65 -0
- package/dist/manifest/renderSpawnfile.js +4 -1
- package/dist/manifest/renderSpawnfileWorkspace.js +6 -2
- package/dist/manifest/schemas.d.ts +1206 -132
- package/dist/manifest/schemas.js +14 -4
- package/dist/manifest/teamNetworkSchemas.d.ts +1 -1
- package/dist/manifest/trainingDataSchemas.d.ts +357 -0
- package/dist/manifest/trainingDataSchemas.js +31 -0
- package/dist/manifest/trainingSchemas.d.ts +49 -0
- package/dist/manifest/trainingSchemas.js +44 -0
- package/dist/manifest/volumeFeedSchemas.d.ts +52 -0
- package/dist/manifest/volumeFeedSchemas.js +104 -0
- package/dist/manifest/workspaceSchemas.d.ts +182 -5
- package/dist/manifest/workspaceSchemas.js +111 -7
- package/dist/recording/compose.d.ts +3 -0
- package/dist/recording/compose.js +93 -0
- package/dist/recording/deployment.d.ts +15 -0
- package/dist/recording/deployment.js +38 -0
- package/dist/recording/history.d.ts +16 -0
- package/dist/recording/history.js +47 -0
- package/dist/recording/index.d.ts +9 -0
- package/dist/recording/index.js +9 -0
- package/dist/recording/moment.d.ts +61 -0
- package/dist/recording/moment.js +36 -0
- package/dist/recording/parse.d.ts +15 -0
- package/dist/recording/parse.js +74 -0
- package/dist/recording/read.d.ts +8 -0
- package/dist/recording/read.js +61 -0
- package/dist/recording/store.d.ts +10 -0
- package/dist/recording/store.js +94 -0
- package/dist/recording/sync.d.ts +24 -0
- package/dist/recording/sync.js +126 -0
- package/dist/recording/types.d.ts +45 -0
- package/dist/recording/types.js +2 -0
- package/dist/release/drainControl.d.ts +54 -0
- package/dist/release/drainControl.js +137 -0
- package/dist/release/drainPhase.d.ts +37 -0
- package/dist/release/drainPhase.js +161 -0
- package/dist/release/index.d.ts +11 -0
- package/dist/release/index.js +11 -0
- package/dist/release/ledger.d.ts +75 -0
- package/dist/release/ledger.js +111 -0
- package/dist/release/notify.d.ts +58 -0
- package/dist/release/notify.js +126 -0
- package/dist/release/pending.d.ts +35 -0
- package/dist/release/pending.js +60 -0
- package/dist/release/postDeploy.d.ts +32 -0
- package/dist/release/postDeploy.js +62 -0
- package/dist/release/releaseDefaults.d.ts +9 -0
- package/dist/release/releaseDefaults.js +115 -0
- package/dist/release/releaseDocker.d.ts +38 -0
- package/dist/release/releaseDocker.js +94 -0
- package/dist/release/releaseTypes.d.ts +94 -0
- package/dist/release/releaseTypes.js +1 -0
- package/dist/release/runRelease.d.ts +9 -0
- package/dist/release/runRelease.js +218 -0
- package/dist/release/swap.d.ts +23 -0
- package/dist/release/swap.js +55 -0
- package/dist/release/types.d.ts +50 -0
- package/dist/release/types.js +29 -0
- package/dist/report/index.d.ts +1 -0
- package/dist/report/index.js +1 -0
- package/dist/report/recording.d.ts +57 -0
- package/dist/report/recording.js +26 -0
- package/dist/report/types.d.ts +58 -0
- package/dist/runtime/container.js +8 -13
- package/dist/runtime/daimon/adapter.js +15 -4
- package/dist/runtime/daimon/config.d.ts +4 -0
- package/dist/runtime/daimon/config.js +53 -4
- package/dist/runtime/daimon/contract-manifest.json +1 -0
- package/dist/runtime/daimon/contract-manifest.sha256 +1 -0
- package/dist/runtime/daimon/contractManifest.d.ts +59 -8
- package/dist/runtime/daimon/contractManifest.js +26 -10
- package/dist/runtime/daimon/grokTurnLimits.d.ts +25 -0
- package/dist/runtime/daimon/grokTurnLimits.js +51 -0
- package/dist/runtime/daimon/grokWorkerConfigBytes.d.ts +17 -0
- package/dist/runtime/daimon/grokWorkerConfigBytes.js +17 -0
- package/dist/runtime/daimon/grokWorkerContract.d.ts +5 -0
- package/dist/runtime/daimon/grokWorkerContract.js +13 -1
- package/dist/runtime/daimon/recording.d.ts +19 -0
- package/dist/runtime/daimon/recording.js +50 -0
- package/dist/runtime/daimon/scheduleAuthority.d.ts +8 -0
- package/dist/runtime/daimon/scheduleAuthority.js +19 -5
- package/dist/runtime/daimon/wakeMoments.d.ts +15 -0
- package/dist/runtime/daimon/wakeMoments.js +17 -0
- package/dist/runtime/daimonInstall.d.ts +3 -0
- package/dist/runtime/daimonInstall.js +25 -0
- package/dist/runtime/index.d.ts +1 -0
- package/dist/runtime/index.js +1 -0
- package/dist/runtime/install.d.ts +2 -0
- package/dist/runtime/install.js +1 -0
- package/dist/runtime/openclaw/adapter.js +3 -0
- package/dist/runtime/pi/adapter.js +3 -0
- package/dist/runtime/pi/containerTargets.js +6 -0
- package/dist/runtime/picoclaw/adapter.js +3 -0
- package/dist/runtime/registry.d.ts +3 -0
- package/dist/runtime/registry.js +13 -1
- package/dist/runtime/types.d.ts +15 -0
- package/dist/runtime/usageLedgerRead.d.ts +6 -0
- package/dist/runtime/usageLedgerRead.js +3 -3
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/index.js +1 -0
- package/dist/shared/recording.d.ts +8 -0
- package/dist/shared/recording.js +25 -0
- package/dist/target/dockerCommandExecutorCore.js +1 -1
- package/dist/target/dockerTargetBinding.js +2 -1
- package/dist/volume/feedLand.d.ts +31 -0
- package/dist/volume/feedLand.js +174 -0
- package/dist/volume/feedLandings.d.ts +45 -0
- package/dist/volume/feedLandings.js +111 -0
- package/dist/volume/feedLayout.d.ts +61 -0
- package/dist/volume/feedLayout.js +234 -0
- package/dist/volume/feedLock.d.ts +7 -0
- package/dist/volume/feedLock.js +131 -0
- package/dist/volume/feedManifest.d.ts +27 -0
- package/dist/volume/feedManifest.js +123 -0
- package/dist/volume/feedPrepare.d.ts +16 -0
- package/dist/volume/feedPrepare.js +228 -0
- package/dist/volume/feedProject.d.ts +39 -0
- package/dist/volume/feedProject.js +92 -0
- package/dist/volume/feedRecord.d.ts +55 -0
- package/dist/volume/feedRecord.js +148 -0
- package/dist/volume/feedRef.d.ts +43 -0
- package/dist/volume/feedRef.js +117 -0
- package/dist/volume/feedRefresh.d.ts +15 -0
- package/dist/volume/feedRefresh.js +187 -0
- package/dist/volume/feedSource.d.ts +66 -0
- package/dist/volume/feedSource.js +104 -0
- package/dist/volume/feedTarget.d.ts +70 -0
- package/dist/volume/feedTarget.js +9 -0
- package/dist/volume/feedTestKit.d.ts +11 -0
- package/dist/volume/feedTestKit.js +45 -0
- package/dist/volume/feedVerify.d.ts +18 -0
- package/dist/volume/feedVerify.js +104 -0
- package/dist/volume/index.d.ts +13 -0
- package/dist/volume/index.js +13 -0
- package/package.json +3 -3
- package/runtimes.yaml +8 -6
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { argvSchema, pinnedImageSchema } from "./commandSchemas.js";
|
|
3
|
+
/** `${date}` (UTC) or `${date:<IANA zone>}`: the local date (YYYY-MM-DD) at refresh time. The only placeholder a ref or path template knows. */
|
|
4
|
+
export const FEED_REF_PLACEHOLDER = /\$\{date(?::([^}]*))?\}/gu;
|
|
5
|
+
export const FEED_CLOCK_PATTERN = /^(?:[01]\d|2[0-3]):[0-5]\d$/u;
|
|
6
|
+
export const isFeedTimeZone = (zone) => {
|
|
7
|
+
try {
|
|
8
|
+
new Intl.DateTimeFormat("en-US", { timeZone: zone });
|
|
9
|
+
return zone.trim() !== "";
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
const plainRelativePath = (entry) => !entry.startsWith("/") && !entry.split("/").some((segment) => segment === ".." || segment === "." || segment === "");
|
|
16
|
+
/** Issues with the placeholders in a ref or path template: only `${date}` and `${date:<IANA zone>}` exist. */
|
|
17
|
+
const templateIssues = (template, what) => {
|
|
18
|
+
const issues = [];
|
|
19
|
+
for (const match of template.matchAll(FEED_REF_PLACEHOLDER)) {
|
|
20
|
+
if (match[1] !== undefined && !isFeedTimeZone(match[1]))
|
|
21
|
+
issues.push(`${what} time zone ${JSON.stringify(match[1])} is not an IANA time zone`);
|
|
22
|
+
}
|
|
23
|
+
if (template.replace(FEED_REF_PLACEHOLDER, "").includes("${"))
|
|
24
|
+
issues.push(`${what}s know only \${date} and \${date:<time zone>}`);
|
|
25
|
+
return issues;
|
|
26
|
+
};
|
|
27
|
+
/** A ref resolved per refresh: a template or a command printing a ref, with an optional fallback when it does not exist yet. */
|
|
28
|
+
const volumeFeedRefRuleSchema = z.object({
|
|
29
|
+
command: argvSchema.optional(),
|
|
30
|
+
fallback: z.string().trim().min(1).optional(),
|
|
31
|
+
template: z.string().trim().min(1).optional()
|
|
32
|
+
}).strict().superRefine((value, context) => {
|
|
33
|
+
if ((value.command === undefined) === (value.template === undefined)) {
|
|
34
|
+
context.addIssue({ code: z.ZodIssueCode.custom, message: "a volume feed ref rule must declare exactly one of template or command" });
|
|
35
|
+
}
|
|
36
|
+
if (value.template === undefined)
|
|
37
|
+
return;
|
|
38
|
+
for (const message of templateIssues(value.template, "volume feed ref template"))
|
|
39
|
+
context.addIssue({ code: z.ZodIssueCode.custom, message });
|
|
40
|
+
});
|
|
41
|
+
/**
|
|
42
|
+
* Host-fed content for a volume: a host directory or a git ref Spawnfile copies into the volume by atomic
|
|
43
|
+
* swap (`spawnfile volume refresh`), never through the image. Exactly one source per feed.
|
|
44
|
+
*/
|
|
45
|
+
export const volumeFeedSchema = z.object({
|
|
46
|
+
directory: z.string().trim().min(1).optional(),
|
|
47
|
+
/** Once local time passes `after`, a volume that already landed this period's ref stops advancing until the period or the ref changes. */
|
|
48
|
+
freeze: z.object({
|
|
49
|
+
after: z.string().regex(FEED_CLOCK_PATTERN, "freeze.after must be HH:MM (24-hour)"),
|
|
50
|
+
timezone: z.string().trim().min(1).refine(isFeedTimeZone, "freeze.timezone must be an IANA time zone")
|
|
51
|
+
}).strict().optional(),
|
|
52
|
+
git: z.object({
|
|
53
|
+
fetch: z.boolean().optional(),
|
|
54
|
+
/** Directories to feed instead of the whole tree; each MAY carry `${date}` placeholders, expanded with the ref. */
|
|
55
|
+
paths: z.array(z.string().trim().min(1)).min(1).optional(),
|
|
56
|
+
ref: z.union([z.string().trim().min(1), volumeFeedRefRuleSchema]).optional(),
|
|
57
|
+
repo: z.string().trim().min(1)
|
|
58
|
+
}).strict().optional(),
|
|
59
|
+
/** Host directories (files not in the source, e.g. fonts) staged into the tree before `prepare`. */
|
|
60
|
+
include: z.array(z.object({
|
|
61
|
+
from: z.string().trim().min(1),
|
|
62
|
+
to: z.string().trim().min(1)
|
|
63
|
+
}).strict()).min(1).optional(),
|
|
64
|
+
keep: z.number().int().min(1).optional(),
|
|
65
|
+
owner: z.string().regex(/^\d+:\d+$/u, "owner must be <uid>:<gid>").optional(),
|
|
66
|
+
/** A command run inside the staged tree after fetch and before validate: in a digest-pinned image, or explicitly on the host. */
|
|
67
|
+
prepare: z.object({
|
|
68
|
+
command: argvSchema,
|
|
69
|
+
host: z.literal(true).optional(),
|
|
70
|
+
image: pinnedImageSchema.optional(),
|
|
71
|
+
network: z.boolean().optional(),
|
|
72
|
+
platform: z.enum(["linux/amd64", "linux/arm64"]).optional(),
|
|
73
|
+
timeout_seconds: z.number().int().positive().max(86_400).optional()
|
|
74
|
+
}).strict().superRefine((value, context) => {
|
|
75
|
+
if ((value.image === undefined) === (value.host === undefined)) {
|
|
76
|
+
context.addIssue({ code: z.ZodIssueCode.custom, message: "volume feed prepare must declare exactly one of image (digest-pinned) or host: true" });
|
|
77
|
+
}
|
|
78
|
+
if (value.host && (value.platform !== undefined || value.network !== undefined)) {
|
|
79
|
+
context.addIssue({ code: z.ZodIssueCode.custom, message: "volume feed prepare platform and network apply only to an image" });
|
|
80
|
+
}
|
|
81
|
+
}).optional(),
|
|
82
|
+
validate: z.array(z.string().min(1)).min(1).optional()
|
|
83
|
+
}).strict().superRefine((value, context) => {
|
|
84
|
+
if ((value.directory === undefined) === (value.git === undefined)) {
|
|
85
|
+
context.addIssue({ code: z.ZodIssueCode.custom, message: "volume feeds must declare exactly one of directory or git" });
|
|
86
|
+
}
|
|
87
|
+
for (const entry of value.git?.paths ?? []) {
|
|
88
|
+
const placeholders = templateIssues(entry, "volume feed git path template");
|
|
89
|
+
for (const message of placeholders)
|
|
90
|
+
context.addIssue({ code: z.ZodIssueCode.custom, message });
|
|
91
|
+
// A placeholder expands to YYYY-MM-DD, so the path is judged with one in its place.
|
|
92
|
+
if (placeholders.length === 0 && !plainRelativePath(entry.replace(FEED_REF_PLACEHOLDER, "0000-00-00"))) {
|
|
93
|
+
context.addIssue({ code: z.ZodIssueCode.custom, message: `volume feed git path ${entry} must be a plain repository-relative path` });
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const targets = (value.include ?? []).map((entry) => entry.to);
|
|
97
|
+
for (const [index, to] of targets.entries()) {
|
|
98
|
+
if (!plainRelativePath(to))
|
|
99
|
+
context.addIssue({ code: z.ZodIssueCode.custom, message: `volume feed include target ${to} must be a plain tree-relative path` });
|
|
100
|
+
if (targets.some((other, at) => at !== index && (other === to || other.startsWith(`${to}/`)))) {
|
|
101
|
+
context.addIssue({ code: z.ZodIssueCode.custom, message: `volume feed include target ${to} overlaps another include` });
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
});
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { volumeFeedSchema } from "./volumeFeedSchemas.js";
|
|
2
3
|
export declare const teamWorkspaceDocsSchema: z.ZodObject<{
|
|
3
4
|
extras: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
4
5
|
heartbeat: z.ZodOptional<z.ZodString>;
|
|
@@ -7,8 +8,49 @@ export declare const teamWorkspaceDocsSchema: z.ZodObject<{
|
|
|
7
8
|
soul: z.ZodOptional<z.ZodString>;
|
|
8
9
|
system: z.ZodOptional<z.ZodString>;
|
|
9
10
|
}, z.core.$strict>;
|
|
10
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Declared inputs Spawnfile builds into the bundle archive. Exactly one input kind per bundle:
|
|
13
|
+
* `files` (git-tracked files), `dependencies` (lockfile installed for the target platform in a
|
|
14
|
+
* pinned image) or `generated` (a declared command writing an output directory from declared inputs).
|
|
15
|
+
*/
|
|
16
|
+
declare const workspaceBundleBuildSchema: z.ZodObject<{
|
|
17
|
+
dependencies: z.ZodOptional<z.ZodObject<{
|
|
18
|
+
check: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
19
|
+
dev: z.ZodOptional<z.ZodBoolean>;
|
|
20
|
+
directory: z.ZodString;
|
|
21
|
+
image: z.ZodString;
|
|
22
|
+
manager: z.ZodOptional<z.ZodLiteral<"npm">>;
|
|
23
|
+
scripts: z.ZodOptional<z.ZodBoolean>;
|
|
24
|
+
}, z.core.$strict>>;
|
|
25
|
+
files: z.ZodOptional<z.ZodObject<{
|
|
26
|
+
exclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
27
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
28
|
+
root: z.ZodString;
|
|
29
|
+
}, z.core.$strict>>;
|
|
30
|
+
generated: z.ZodOptional<z.ZodObject<{
|
|
31
|
+
command: z.ZodArray<z.ZodString>;
|
|
32
|
+
cwd: z.ZodOptional<z.ZodString>;
|
|
33
|
+
image: z.ZodOptional<z.ZodString>;
|
|
34
|
+
inputs: z.ZodArray<z.ZodObject<{
|
|
35
|
+
exclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
36
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
37
|
+
root: z.ZodString;
|
|
38
|
+
}, z.core.$strict>>;
|
|
39
|
+
timeout_seconds: z.ZodOptional<z.ZodNumber>;
|
|
40
|
+
tools: z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodString>>>;
|
|
41
|
+
}, z.core.$strict>>;
|
|
42
|
+
}, z.core.$strict>;
|
|
43
|
+
export declare const teamWorkspaceResourceSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
44
|
+
auth: z.ZodOptional<z.ZodObject<{
|
|
45
|
+
ssh_key: z.ZodOptional<z.ZodString>;
|
|
46
|
+
ssh_key_env: z.ZodOptional<z.ZodString>;
|
|
47
|
+
}, z.core.$strict>>;
|
|
11
48
|
branch: z.ZodOptional<z.ZodString>;
|
|
49
|
+
exclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
50
|
+
fetch: z.ZodOptional<z.ZodEnum<{
|
|
51
|
+
start: "start";
|
|
52
|
+
build: "build";
|
|
53
|
+
}>>;
|
|
12
54
|
id: z.ZodString;
|
|
13
55
|
kind: z.ZodLiteral<"git">;
|
|
14
56
|
mount: z.ZodString;
|
|
@@ -24,14 +66,76 @@ declare const teamWorkspaceResourceSchema: z.ZodDiscriminatedUnion<[z.ZodObject<
|
|
|
24
66
|
tag: z.ZodOptional<z.ZodString>;
|
|
25
67
|
url: z.ZodString;
|
|
26
68
|
}, z.core.$strict>, z.ZodObject<{
|
|
69
|
+
build: z.ZodOptional<z.ZodObject<{
|
|
70
|
+
dependencies: z.ZodOptional<z.ZodObject<{
|
|
71
|
+
check: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
72
|
+
dev: z.ZodOptional<z.ZodBoolean>;
|
|
73
|
+
directory: z.ZodString;
|
|
74
|
+
image: z.ZodString;
|
|
75
|
+
manager: z.ZodOptional<z.ZodLiteral<"npm">>;
|
|
76
|
+
scripts: z.ZodOptional<z.ZodBoolean>;
|
|
77
|
+
}, z.core.$strict>>;
|
|
78
|
+
files: z.ZodOptional<z.ZodObject<{
|
|
79
|
+
exclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
80
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
81
|
+
root: z.ZodString;
|
|
82
|
+
}, z.core.$strict>>;
|
|
83
|
+
generated: z.ZodOptional<z.ZodObject<{
|
|
84
|
+
command: z.ZodArray<z.ZodString>;
|
|
85
|
+
cwd: z.ZodOptional<z.ZodString>;
|
|
86
|
+
image: z.ZodOptional<z.ZodString>;
|
|
87
|
+
inputs: z.ZodArray<z.ZodObject<{
|
|
88
|
+
exclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
89
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
90
|
+
root: z.ZodString;
|
|
91
|
+
}, z.core.$strict>>;
|
|
92
|
+
timeout_seconds: z.ZodOptional<z.ZodNumber>;
|
|
93
|
+
tools: z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodString>>>;
|
|
94
|
+
}, z.core.$strict>>;
|
|
95
|
+
}, z.core.$strict>>;
|
|
27
96
|
id: z.ZodString;
|
|
28
97
|
kind: z.ZodLiteral<"bundle">;
|
|
29
98
|
mount: z.ZodString;
|
|
30
99
|
mode: z.ZodLiteral<"readonly">;
|
|
31
|
-
sha256: z.ZodString
|
|
100
|
+
sha256: z.ZodOptional<z.ZodString>;
|
|
32
101
|
sharing: z.ZodOptional<z.ZodLiteral<"per_agent">>;
|
|
33
|
-
source: z.ZodString
|
|
102
|
+
source: z.ZodOptional<z.ZodString>;
|
|
34
103
|
}, z.core.$strict>, z.ZodObject<{
|
|
104
|
+
feed: z.ZodOptional<z.ZodObject<{
|
|
105
|
+
directory: z.ZodOptional<z.ZodString>;
|
|
106
|
+
freeze: z.ZodOptional<z.ZodObject<{
|
|
107
|
+
after: z.ZodString;
|
|
108
|
+
timezone: z.ZodString;
|
|
109
|
+
}, z.core.$strict>>;
|
|
110
|
+
git: z.ZodOptional<z.ZodObject<{
|
|
111
|
+
fetch: z.ZodOptional<z.ZodBoolean>;
|
|
112
|
+
paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
113
|
+
ref: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
114
|
+
command: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
115
|
+
fallback: z.ZodOptional<z.ZodString>;
|
|
116
|
+
template: z.ZodOptional<z.ZodString>;
|
|
117
|
+
}, z.core.$strict>]>>;
|
|
118
|
+
repo: z.ZodString;
|
|
119
|
+
}, z.core.$strict>>;
|
|
120
|
+
include: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
121
|
+
from: z.ZodString;
|
|
122
|
+
to: z.ZodString;
|
|
123
|
+
}, z.core.$strict>>>;
|
|
124
|
+
keep: z.ZodOptional<z.ZodNumber>;
|
|
125
|
+
owner: z.ZodOptional<z.ZodString>;
|
|
126
|
+
prepare: z.ZodOptional<z.ZodObject<{
|
|
127
|
+
command: z.ZodArray<z.ZodString>;
|
|
128
|
+
host: z.ZodOptional<z.ZodLiteral<true>>;
|
|
129
|
+
image: z.ZodOptional<z.ZodString>;
|
|
130
|
+
network: z.ZodOptional<z.ZodBoolean>;
|
|
131
|
+
platform: z.ZodOptional<z.ZodEnum<{
|
|
132
|
+
"linux/amd64": "linux/amd64";
|
|
133
|
+
"linux/arm64": "linux/arm64";
|
|
134
|
+
}>>;
|
|
135
|
+
timeout_seconds: z.ZodOptional<z.ZodNumber>;
|
|
136
|
+
}, z.core.$strict>>;
|
|
137
|
+
validate: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
138
|
+
}, z.core.$strict>>;
|
|
35
139
|
id: z.ZodString;
|
|
36
140
|
kind: z.ZodLiteral<"volume">;
|
|
37
141
|
mount: z.ZodString;
|
|
@@ -61,7 +165,16 @@ export declare const teamWorkspaceSchema: z.ZodObject<{
|
|
|
61
165
|
system: z.ZodOptional<z.ZodString>;
|
|
62
166
|
}, z.core.$strict>>;
|
|
63
167
|
resources: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
168
|
+
auth: z.ZodOptional<z.ZodObject<{
|
|
169
|
+
ssh_key: z.ZodOptional<z.ZodString>;
|
|
170
|
+
ssh_key_env: z.ZodOptional<z.ZodString>;
|
|
171
|
+
}, z.core.$strict>>;
|
|
64
172
|
branch: z.ZodOptional<z.ZodString>;
|
|
173
|
+
exclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
174
|
+
fetch: z.ZodOptional<z.ZodEnum<{
|
|
175
|
+
start: "start";
|
|
176
|
+
build: "build";
|
|
177
|
+
}>>;
|
|
65
178
|
id: z.ZodString;
|
|
66
179
|
kind: z.ZodLiteral<"git">;
|
|
67
180
|
mount: z.ZodString;
|
|
@@ -77,14 +190,76 @@ export declare const teamWorkspaceSchema: z.ZodObject<{
|
|
|
77
190
|
tag: z.ZodOptional<z.ZodString>;
|
|
78
191
|
url: z.ZodString;
|
|
79
192
|
}, z.core.$strict>, z.ZodObject<{
|
|
193
|
+
build: z.ZodOptional<z.ZodObject<{
|
|
194
|
+
dependencies: z.ZodOptional<z.ZodObject<{
|
|
195
|
+
check: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
196
|
+
dev: z.ZodOptional<z.ZodBoolean>;
|
|
197
|
+
directory: z.ZodString;
|
|
198
|
+
image: z.ZodString;
|
|
199
|
+
manager: z.ZodOptional<z.ZodLiteral<"npm">>;
|
|
200
|
+
scripts: z.ZodOptional<z.ZodBoolean>;
|
|
201
|
+
}, z.core.$strict>>;
|
|
202
|
+
files: z.ZodOptional<z.ZodObject<{
|
|
203
|
+
exclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
204
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
205
|
+
root: z.ZodString;
|
|
206
|
+
}, z.core.$strict>>;
|
|
207
|
+
generated: z.ZodOptional<z.ZodObject<{
|
|
208
|
+
command: z.ZodArray<z.ZodString>;
|
|
209
|
+
cwd: z.ZodOptional<z.ZodString>;
|
|
210
|
+
image: z.ZodOptional<z.ZodString>;
|
|
211
|
+
inputs: z.ZodArray<z.ZodObject<{
|
|
212
|
+
exclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
213
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
214
|
+
root: z.ZodString;
|
|
215
|
+
}, z.core.$strict>>;
|
|
216
|
+
timeout_seconds: z.ZodOptional<z.ZodNumber>;
|
|
217
|
+
tools: z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodString>>>;
|
|
218
|
+
}, z.core.$strict>>;
|
|
219
|
+
}, z.core.$strict>>;
|
|
80
220
|
id: z.ZodString;
|
|
81
221
|
kind: z.ZodLiteral<"bundle">;
|
|
82
222
|
mount: z.ZodString;
|
|
83
223
|
mode: z.ZodLiteral<"readonly">;
|
|
84
|
-
sha256: z.ZodString
|
|
224
|
+
sha256: z.ZodOptional<z.ZodString>;
|
|
85
225
|
sharing: z.ZodOptional<z.ZodLiteral<"per_agent">>;
|
|
86
|
-
source: z.ZodString
|
|
226
|
+
source: z.ZodOptional<z.ZodString>;
|
|
87
227
|
}, z.core.$strict>, z.ZodObject<{
|
|
228
|
+
feed: z.ZodOptional<z.ZodObject<{
|
|
229
|
+
directory: z.ZodOptional<z.ZodString>;
|
|
230
|
+
freeze: z.ZodOptional<z.ZodObject<{
|
|
231
|
+
after: z.ZodString;
|
|
232
|
+
timezone: z.ZodString;
|
|
233
|
+
}, z.core.$strict>>;
|
|
234
|
+
git: z.ZodOptional<z.ZodObject<{
|
|
235
|
+
fetch: z.ZodOptional<z.ZodBoolean>;
|
|
236
|
+
paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
237
|
+
ref: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
238
|
+
command: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
239
|
+
fallback: z.ZodOptional<z.ZodString>;
|
|
240
|
+
template: z.ZodOptional<z.ZodString>;
|
|
241
|
+
}, z.core.$strict>]>>;
|
|
242
|
+
repo: z.ZodString;
|
|
243
|
+
}, z.core.$strict>>;
|
|
244
|
+
include: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
245
|
+
from: z.ZodString;
|
|
246
|
+
to: z.ZodString;
|
|
247
|
+
}, z.core.$strict>>>;
|
|
248
|
+
keep: z.ZodOptional<z.ZodNumber>;
|
|
249
|
+
owner: z.ZodOptional<z.ZodString>;
|
|
250
|
+
prepare: z.ZodOptional<z.ZodObject<{
|
|
251
|
+
command: z.ZodArray<z.ZodString>;
|
|
252
|
+
host: z.ZodOptional<z.ZodLiteral<true>>;
|
|
253
|
+
image: z.ZodOptional<z.ZodString>;
|
|
254
|
+
network: z.ZodOptional<z.ZodBoolean>;
|
|
255
|
+
platform: z.ZodOptional<z.ZodEnum<{
|
|
256
|
+
"linux/amd64": "linux/amd64";
|
|
257
|
+
"linux/arm64": "linux/arm64";
|
|
258
|
+
}>>;
|
|
259
|
+
timeout_seconds: z.ZodOptional<z.ZodNumber>;
|
|
260
|
+
}, z.core.$strict>>;
|
|
261
|
+
validate: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
262
|
+
}, z.core.$strict>>;
|
|
88
263
|
id: z.ZodString;
|
|
89
264
|
kind: z.ZodLiteral<"volume">;
|
|
90
265
|
mount: z.ZodString;
|
|
@@ -108,5 +283,7 @@ export declare const teamWorkspaceSchema: z.ZodObject<{
|
|
|
108
283
|
export type TeamWorkspace = z.infer<typeof teamWorkspaceSchema>;
|
|
109
284
|
export type TeamWorkspaceDocs = z.infer<typeof teamWorkspaceDocsSchema>;
|
|
110
285
|
export type TeamWorkspaceResource = z.infer<typeof teamWorkspaceResourceSchema>;
|
|
286
|
+
export type WorkspaceBundleBuild = z.infer<typeof workspaceBundleBuildSchema>;
|
|
287
|
+
export type VolumeFeed = z.infer<typeof volumeFeedSchema>;
|
|
111
288
|
export type TeamWorkspaceSkill = z.infer<typeof workspaceSkillReferenceSchema>;
|
|
112
289
|
export {};
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { argvSchema, pinnedImageSchema } from "./commandSchemas.js";
|
|
3
|
+
import { volumeFeedSchema } from "./volumeFeedSchemas.js";
|
|
2
4
|
const workspaceResourceModeSchema = z.enum(["mutable", "readonly"]);
|
|
3
5
|
const workspaceResourceSharingSchema = z.enum(["per_agent", "team"]);
|
|
4
6
|
export const teamWorkspaceDocsSchema = z
|
|
@@ -51,9 +53,36 @@ const resourceMountSchema = z
|
|
|
51
53
|
});
|
|
52
54
|
}
|
|
53
55
|
});
|
|
56
|
+
/** Host-side credentials for a `fetch: build` git resource: a key file path, or an env var holding the key. */
|
|
57
|
+
const gitResourceAuthSchema = z
|
|
58
|
+
.object({
|
|
59
|
+
ssh_key: z.string().trim().min(1).optional(),
|
|
60
|
+
ssh_key_env: z.string().trim().regex(/^[A-Za-z_][A-Za-z0-9_]*$/u, "ssh_key_env must be an environment variable name").optional()
|
|
61
|
+
})
|
|
62
|
+
.strict()
|
|
63
|
+
.refine((value) => (value.ssh_key === undefined) !== (value.ssh_key_env === undefined), {
|
|
64
|
+
message: "git resource auth must declare exactly one of ssh_key or ssh_key_env"
|
|
65
|
+
});
|
|
66
|
+
/**
|
|
67
|
+
* True when a URL may carry a credential: any password, any userinfo on a
|
|
68
|
+
* non-SSH URL (a token is often sent as the user name), or a query string.
|
|
69
|
+
* An SSH user name (`git@host:...`, `ssh://git@host/...`) is not a secret.
|
|
70
|
+
*/
|
|
71
|
+
const urlEmbedsCredential = (url) => {
|
|
72
|
+
const scheme = /^([a-z][a-z0-9+.-]*):\/\/([^/]*)/iu.exec(url);
|
|
73
|
+
if (!scheme)
|
|
74
|
+
return url.includes("?");
|
|
75
|
+
const authority = scheme[2], userinfo = authority.includes("@") ? authority.slice(0, authority.lastIndexOf("@")) : undefined;
|
|
76
|
+
if (url.includes("?") || userinfo?.includes(":"))
|
|
77
|
+
return true;
|
|
78
|
+
return userinfo !== undefined && !/^(ssh|git\+ssh|ssh\+git)$/iu.test(scheme[1]);
|
|
79
|
+
};
|
|
54
80
|
const teamWorkspaceResourceGitSchema = z
|
|
55
81
|
.object({
|
|
82
|
+
auth: gitResourceAuthSchema.optional(),
|
|
56
83
|
branch: z.string().trim().optional(),
|
|
84
|
+
exclude: z.array(z.string().trim().min(1)).optional(),
|
|
85
|
+
fetch: z.enum(["start", "build"]).optional(),
|
|
57
86
|
id: z.string().trim().min(1),
|
|
58
87
|
kind: z.literal("git"),
|
|
59
88
|
mount: resourceMountSchema,
|
|
@@ -72,6 +101,25 @@ const teamWorkspaceResourceGitSchema = z
|
|
|
72
101
|
message: "git resources may declare at most one of branch, tag, or ref"
|
|
73
102
|
});
|
|
74
103
|
}
|
|
104
|
+
if (value.fetch === "build") {
|
|
105
|
+
if ([value.branch, value.tag, value.ref].some((selector) => selector !== undefined && selector === "")) {
|
|
106
|
+
context.addIssue({ code: z.ZodIssueCode.custom, message: "git resource branch, tag, or ref must not be empty with fetch: build" });
|
|
107
|
+
}
|
|
108
|
+
if (value.mode !== "readonly") {
|
|
109
|
+
context.addIssue({ code: z.ZodIssueCode.custom, message: "git resources with fetch: build are pinned image content and must be mode: readonly" });
|
|
110
|
+
}
|
|
111
|
+
if (urlEmbedsCredential(value.url)) {
|
|
112
|
+
context.addIssue({ code: z.ZodIssueCode.custom, message: "git resource url must not embed a credential; declare auth instead" });
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
if (value.auth !== undefined) {
|
|
117
|
+
context.addIssue({ code: z.ZodIssueCode.custom, message: "git resource auth requires fetch: build; a container-start clone never receives host credentials" });
|
|
118
|
+
}
|
|
119
|
+
if (value.exclude !== undefined) {
|
|
120
|
+
context.addIssue({ code: z.ZodIssueCode.custom, message: "git resource exclude requires fetch: build" });
|
|
121
|
+
}
|
|
122
|
+
}
|
|
75
123
|
if (value.sharing === "team") {
|
|
76
124
|
context.addIssue({
|
|
77
125
|
code: z.ZodIssueCode.custom,
|
|
@@ -81,6 +129,7 @@ const teamWorkspaceResourceGitSchema = z
|
|
|
81
129
|
});
|
|
82
130
|
const teamWorkspaceResourceVolumeSchema = z
|
|
83
131
|
.object({
|
|
132
|
+
feed: volumeFeedSchema.optional(),
|
|
84
133
|
id: z.string().trim().min(1),
|
|
85
134
|
kind: z.literal("volume"),
|
|
86
135
|
mount: resourceMountSchema,
|
|
@@ -88,13 +137,64 @@ const teamWorkspaceResourceVolumeSchema = z
|
|
|
88
137
|
name: z.string().trim().optional(),
|
|
89
138
|
sharing: workspaceResourceSharingSchema.optional()
|
|
90
139
|
})
|
|
91
|
-
.strict()
|
|
140
|
+
.strict()
|
|
141
|
+
.superRefine((value, context) => {
|
|
142
|
+
if (!value.feed)
|
|
143
|
+
return;
|
|
144
|
+
// The host job addresses the volume by its exact host name, so a derived, unpublished name cannot be fed.
|
|
145
|
+
if (!value.name)
|
|
146
|
+
context.addIssue({ code: z.ZodIssueCode.custom, message: "fed volumes must declare name" });
|
|
147
|
+
// A readonly volume is made read-only by the container rewriting the whole volume on every start;
|
|
148
|
+
// a fed volume is instead frozen tree by tree on the host, so it stays mutable at the mount.
|
|
149
|
+
if (value.mode !== "mutable")
|
|
150
|
+
context.addIssue({ code: z.ZodIssueCode.custom, message: "fed volumes must declare mode: mutable; the host freezes every landed tree" });
|
|
151
|
+
});
|
|
152
|
+
/** Declared inputs Spawnfile builds into the bundle archive. Exactly one input kind per bundle. */
|
|
153
|
+
const workspaceBundleFilesSchema = z.object({
|
|
154
|
+
exclude: z.array(z.string().trim().min(1)).optional(),
|
|
155
|
+
/** Archive the tree of this commit (any git revision) instead of the work tree; needs no clean checkout. */
|
|
156
|
+
ref: z.string().trim().min(1).optional(),
|
|
157
|
+
root: z.string().trim().min(1)
|
|
158
|
+
}).strict();
|
|
159
|
+
/**
|
|
160
|
+
* Declared inputs Spawnfile builds into the bundle archive. Exactly one input kind per bundle:
|
|
161
|
+
* `files` (git-tracked files), `dependencies` (lockfile installed for the target platform in a
|
|
162
|
+
* pinned image) or `generated` (a declared command writing an output directory from declared inputs).
|
|
163
|
+
*/
|
|
164
|
+
const workspaceBundleBuildSchema = z.object({
|
|
165
|
+
dependencies: z.object({
|
|
166
|
+
check: argvSchema.optional(),
|
|
167
|
+
dev: z.boolean().optional(),
|
|
168
|
+
directory: z.string().trim().min(1),
|
|
169
|
+
image: pinnedImageSchema,
|
|
170
|
+
manager: z.literal("npm").optional(),
|
|
171
|
+
scripts: z.boolean().optional()
|
|
172
|
+
}).strict().optional(),
|
|
173
|
+
files: workspaceBundleFilesSchema.optional(),
|
|
174
|
+
generated: z.object({
|
|
175
|
+
command: argvSchema,
|
|
176
|
+
cwd: z.string().trim().min(1).optional(),
|
|
177
|
+
image: pinnedImageSchema.optional(),
|
|
178
|
+
inputs: z.array(workspaceBundleFilesSchema).min(1),
|
|
179
|
+
timeout_seconds: z.number().int().positive().max(86_400).optional(),
|
|
180
|
+
tools: z.array(argvSchema).optional()
|
|
181
|
+
}).strict().optional()
|
|
182
|
+
}).strict().superRefine((value, context) => {
|
|
183
|
+
if ([value.files, value.dependencies, value.generated].filter((kind) => kind !== undefined).length !== 1) {
|
|
184
|
+
context.addIssue({ code: z.ZodIssueCode.custom, message: "bundle build must declare exactly one of files, dependencies or generated" });
|
|
185
|
+
}
|
|
186
|
+
});
|
|
92
187
|
const teamWorkspaceResourceBundleSchema = z.object({
|
|
188
|
+
build: workspaceBundleBuildSchema.optional(),
|
|
93
189
|
id: z.string().trim().min(1), kind: z.literal("bundle"), mount: resourceMountSchema,
|
|
94
|
-
mode: z.literal("readonly"), sha256: z.string().regex(/^sha256:[a-f0-9]{64}$/u),
|
|
95
|
-
sharing: z.literal("per_agent").optional(), source: z.string().trim().min(1)
|
|
96
|
-
}).strict()
|
|
97
|
-
|
|
190
|
+
mode: z.literal("readonly"), sha256: z.string().regex(/^sha256:[a-f0-9]{64}$/u).optional(),
|
|
191
|
+
sharing: z.literal("per_agent").optional(), source: z.string().trim().min(1).optional()
|
|
192
|
+
}).strict().superRefine((value, context) => {
|
|
193
|
+
if ((value.source === undefined) === (value.build === undefined)) {
|
|
194
|
+
context.addIssue({ code: z.ZodIssueCode.custom, message: "bundle resources must declare exactly one of source or build" });
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
export const teamWorkspaceResourceSchema = z.discriminatedUnion("kind", [
|
|
98
198
|
teamWorkspaceResourceGitSchema,
|
|
99
199
|
teamWorkspaceResourceBundleSchema,
|
|
100
200
|
teamWorkspaceResourceVolumeSchema
|
|
@@ -125,7 +225,10 @@ export const teamWorkspaceSchema = z
|
|
|
125
225
|
const normalizeResourceIdentity = (resource) => {
|
|
126
226
|
if (resource.kind === "git") {
|
|
127
227
|
return JSON.stringify({
|
|
228
|
+
auth: resource.auth ?? null,
|
|
128
229
|
branch: resource.branch?.trim() ?? "",
|
|
230
|
+
exclude: resource.exclude ?? null,
|
|
231
|
+
fetch: resource.fetch ?? "start",
|
|
129
232
|
kind: "git",
|
|
130
233
|
mode: resource.mode,
|
|
131
234
|
mount: normalizeMount(resource.mount),
|
|
@@ -137,10 +240,11 @@ export const teamWorkspaceSchema = z
|
|
|
137
240
|
}
|
|
138
241
|
if (resource.kind === "bundle")
|
|
139
242
|
return JSON.stringify({
|
|
140
|
-
kind: resource.kind, mode: resource.mode, mount: normalizeMount(resource.mount),
|
|
141
|
-
sha256: resource.sha256, sharing: resource.sharing ?? "per_agent", source: resource.source
|
|
243
|
+
build: resource.build ?? null, kind: resource.kind, mode: resource.mode, mount: normalizeMount(resource.mount),
|
|
244
|
+
sha256: resource.sha256 ?? null, sharing: resource.sharing ?? "per_agent", source: resource.source ?? null
|
|
142
245
|
});
|
|
143
246
|
return JSON.stringify({
|
|
247
|
+
...(resource.feed ? { feed: resource.feed } : {}),
|
|
144
248
|
kind: "volume",
|
|
145
249
|
mode: resource.mode,
|
|
146
250
|
mount: normalizeMount(resource.mount),
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { feedLandingAt } from "../volume/index.js";
|
|
2
|
+
import { recordingHistoryAt } from "./history.js";
|
|
3
|
+
import { MOMENT_RECORD_VERSION } from "./types.js";
|
|
4
|
+
const orderedUnique = (values) => [...new Set(values)].sort();
|
|
5
|
+
/** Compose only supplied evidence at the turn boundary; this function reads no files or clock. */
|
|
6
|
+
export const composeMomentRecord = (input) => {
|
|
7
|
+
const { row, agentNodeId } = input;
|
|
8
|
+
const errors = [...(input.errors ?? [])];
|
|
9
|
+
if (row.agent_id !== agentNodeId)
|
|
10
|
+
errors.push(`Wake agent ${row.agent_id} does not match compiled agent ${agentNodeId}`);
|
|
11
|
+
if (row.error !== undefined)
|
|
12
|
+
errors.push(`Wake recording: ${row.error}`);
|
|
13
|
+
if (!row.deliveries.length)
|
|
14
|
+
throw new Error("A wake moment requires at least one delivery");
|
|
15
|
+
const startedAt = row.started_at, started = Date.parse(startedAt);
|
|
16
|
+
if (!Number.isFinite(started))
|
|
17
|
+
throw new Error("A wake moment requires a valid started_at");
|
|
18
|
+
const resources = [];
|
|
19
|
+
const history = recordingHistoryAt(input.deployResources, input.deploymentRecordPath, startedAt, agentNodeId);
|
|
20
|
+
const { deployment, agent } = history;
|
|
21
|
+
errors.push(...history.errors);
|
|
22
|
+
if (deployment && (!deployment.activation_exact || deployment.exact === false)) {
|
|
23
|
+
errors.push(`Deployment activation is non-exact${deployment.activation_note ? `: ${deployment.activation_note}` : ""}`);
|
|
24
|
+
}
|
|
25
|
+
for (const resource of [...(agent?.resources ?? [])].sort((a, b) => a.id.localeCompare(b.id) || a.kind.localeCompare(b.kind))) {
|
|
26
|
+
const matches = deployment?.resources.filter((entry) => entry.id === resource.id && entry.kind === resource.kind) ?? [];
|
|
27
|
+
const pin = matches[0];
|
|
28
|
+
if (matches.length !== 1 || !pin) {
|
|
29
|
+
errors.push(`${matches.length ? "Ambiguous" : "Missing"} deployment history for ${resource.kind} resource ${resource.id} at ${startedAt}`);
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
resources.push(pin.kind === "git"
|
|
33
|
+
? { id: pin.id, kind: pin.kind, commit: pin.commit, sha256: pin.sha256 }
|
|
34
|
+
: { id: pin.id, kind: pin.kind, sha256: pin.sha256 });
|
|
35
|
+
}
|
|
36
|
+
const feeds = [];
|
|
37
|
+
for (const { id, volume_name } of agent?.feeds ?? []) {
|
|
38
|
+
const history = Object.hasOwn(input.feedLandings, id) ? input.feedLandings[id] : [];
|
|
39
|
+
const landing = feedLandingAt(history.filter((entry) => entry.resource === id && entry.volume === volume_name), startedAt);
|
|
40
|
+
if (!landing) {
|
|
41
|
+
errors.push(`Missing feed history for ${id} at ${startedAt}`);
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
if (landing.ambiguous)
|
|
45
|
+
errors.push(`Feed ${id} transition is ambiguous at ${startedAt} (${landing.switching_at} through ${landing.landed_at})`);
|
|
46
|
+
feeds.push({ id, revision: landing.revision, tree: landing.tree, landedAt: landing.landed_at,
|
|
47
|
+
...(landing.commit === undefined ? {} : { commit: landing.commit }),
|
|
48
|
+
...(landing.ref === undefined ? {} : { ref: landing.ref }),
|
|
49
|
+
...(landing.paths === undefined ? {} : { paths: [...landing.paths] }),
|
|
50
|
+
...(landing.period === undefined ? {} : { period: landing.period }) });
|
|
51
|
+
}
|
|
52
|
+
const memory = [];
|
|
53
|
+
for (const bank of [...(agent?.memory ?? [])].sort((a, b) => a.id.localeCompare(b.id) || a.declared_by.localeCompare(b.declared_by))) {
|
|
54
|
+
const ledger = bank.ledger_path === null ? undefined : input.memoryLedgers[bank.ledger_path];
|
|
55
|
+
if (!ledger || ledger.errors?.length) {
|
|
56
|
+
const reasons = ledger?.errors?.length ? ledger.errors : ["ledger could not be read"];
|
|
57
|
+
errors.push(...reasons.map((reason) => `Memory bank ${bank.id} (${bank.declared_by}): ${reason}`));
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
const seq = ledger.entries.reduce((highest, entry) => Date.parse(entry.createdAt) <= started ? Math.max(highest, entry.seq) : highest, 0);
|
|
61
|
+
memory.push({ id: bank.id, declaredBy: bank.declared_by, seq });
|
|
62
|
+
}
|
|
63
|
+
const snapshotIds = orderedUnique(agent?.snapshots ?? []);
|
|
64
|
+
for (const id of snapshotIds) {
|
|
65
|
+
if (!row.snapshots.some((entry) => entry.id === id))
|
|
66
|
+
errors.push(`Missing pre-turn snapshot for ${id}`);
|
|
67
|
+
}
|
|
68
|
+
const volumes = [];
|
|
69
|
+
for (const { id, snapshot } of [...row.snapshots].sort((a, b) => a.id.localeCompare(b.id))) {
|
|
70
|
+
if (!snapshotIds.includes(id)) {
|
|
71
|
+
errors.push(`Unexpected pre-turn snapshot for ${id}: not an effective recording root for ${agentNodeId}`);
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
volumes.push({ id, snapshot });
|
|
75
|
+
}
|
|
76
|
+
const messageIds = row.deliveries.flatMap(({ delivery_id }) => {
|
|
77
|
+
const match = /^moltnet:(.+)$/u.exec(delivery_id);
|
|
78
|
+
return match ? [match[1]] : [];
|
|
79
|
+
});
|
|
80
|
+
return {
|
|
81
|
+
version: MOMENT_RECORD_VERSION, agent: agentNodeId,
|
|
82
|
+
wake: {
|
|
83
|
+
at: row.deliveries[0].occurred_at, startedAt, executionId: row.execution_id,
|
|
84
|
+
deliveries: row.deliveries.map(({ delivery_id, kind, occurred_at }) => ({ deliveryId: delivery_id, kind, occurredAt: occurred_at })),
|
|
85
|
+
...(messageIds.length ? { surface: "moltnet", messageId: messageIds[0] } : {})
|
|
86
|
+
},
|
|
87
|
+
recordedAt: input.recordedAt, exact: errors.length === 0, resources, feeds, memory,
|
|
88
|
+
moltnet: orderedUnique(agent?.networks ?? []).map((network) => ({ network, cursor: startedAt,
|
|
89
|
+
...(messageIds.length ? { messageIds: [...messageIds] } : {}) })),
|
|
90
|
+
volumes,
|
|
91
|
+
...(errors.length ? { errors } : {})
|
|
92
|
+
};
|
|
93
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { createDockerProbeGateway, inspectDockerDeployment, type DeploymentRecord } from "../deployment/index.js";
|
|
2
|
+
import { type SyncMomentRecordsOptions, type SyncMomentRecordsResult } from "./sync.js";
|
|
3
|
+
export interface RecordingDeploymentHandlers {
|
|
4
|
+
createDockerProbeGateway?: typeof createDockerProbeGateway;
|
|
5
|
+
inspectDockerDeployment?: typeof inspectDockerDeployment;
|
|
6
|
+
readFeedHistory?: SyncMomentRecordsOptions["readFeedHistory"];
|
|
7
|
+
now?: () => Date;
|
|
8
|
+
}
|
|
9
|
+
export interface RecordingDeploymentOptions {
|
|
10
|
+
record: DeploymentRecord;
|
|
11
|
+
recordPath: string;
|
|
12
|
+
dockerCommand?: string;
|
|
13
|
+
timeoutMs?: number;
|
|
14
|
+
}
|
|
15
|
+
export declare const syncDeploymentMoments: (options: RecordingDeploymentOptions, handlers?: RecordingDeploymentHandlers) => Promise<SyncMomentRecordsResult>;
|