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,118 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { lstat, mkdir, readFile, writeFile } from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { isDeepStrictEqual } from "node:util";
|
|
5
|
+
import { materializeTrainingMoment } from "./rewind/materialize.js";
|
|
6
|
+
import { normalizeInstant } from "./rewind/instant.js";
|
|
7
|
+
import { materializedMomentSchema } from "./rewind/contract.js";
|
|
8
|
+
const roles = ["train", "validation", "test"];
|
|
9
|
+
const hash = (value) => createHash("sha256").update(JSON.stringify(value)).digest("hex");
|
|
10
|
+
const save = (file, value) => writeFile(file, `${JSON.stringify(value, null, 2)}\n`, { flag: "wx", mode: 0o600 });
|
|
11
|
+
/** Rewind each authored example exactly once; repeated target references share one case. */
|
|
12
|
+
export const lowerTrainingMoments = async (options) => {
|
|
13
|
+
const { project, plan } = options;
|
|
14
|
+
const out = path.resolve(options.out);
|
|
15
|
+
// A fresh root is intentional: resume must use the persisted lowered dataset, never overwrite it.
|
|
16
|
+
await mkdir(out, { mode: 0o700 });
|
|
17
|
+
const entries = [];
|
|
18
|
+
const records = { train: [], validation: [], test: [] };
|
|
19
|
+
const seen = new Set(), declared = new Set();
|
|
20
|
+
const historyDir = options.historyDir ?? plan.preparation?.history;
|
|
21
|
+
for (const role of roles)
|
|
22
|
+
for (const target of plan.targets) {
|
|
23
|
+
const dataset = target.datasets[role];
|
|
24
|
+
if (!dataset)
|
|
25
|
+
continue;
|
|
26
|
+
declared.add(role);
|
|
27
|
+
for (const example of dataset.examples) {
|
|
28
|
+
const identity = JSON.stringify([role, dataset.sourcePath, example.id]);
|
|
29
|
+
if (seen.has(identity))
|
|
30
|
+
continue;
|
|
31
|
+
seen.add(identity);
|
|
32
|
+
// Group follows the authored example's identity, not its split, preventing split leakage.
|
|
33
|
+
const group = `moment:${hash([plan.agent.id, example.id])}`;
|
|
34
|
+
const momentRoot = path.join(out, "moments", role, hash(identity));
|
|
35
|
+
const entry = { id: example.id, role, dataset: dataset.path, at: example.at,
|
|
36
|
+
wake: example.wake, group, lineage: null, momentRoot, status: "refused" };
|
|
37
|
+
entries.push(entry);
|
|
38
|
+
try {
|
|
39
|
+
const lineage = `moment:${hash([plan.agent.id, normalizeInstant(example.at), example.wake])}`;
|
|
40
|
+
entry.lineage = lineage;
|
|
41
|
+
// Scope the selector to this dataset; different datasets may use the same example ID.
|
|
42
|
+
const scoped = { ...plan, targets: [{ ...target, datasets: { ...target.datasets, [role]: dataset } }] };
|
|
43
|
+
const moment = await materializeTrainingMoment({ project, plan: scoped, example: `${role}:${example.id}`, historyDir, out: momentRoot });
|
|
44
|
+
entry.moment = moment;
|
|
45
|
+
if (moment.status === "refused") {
|
|
46
|
+
entry.reason = moment.inputs.flatMap(input => input.refusal ? [input.refusal] : []).join("; ") || "Rewind leak check refused the example";
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
const prepared = await options.prepareCase?.({ moment, momentRoot, example, role, dataset: dataset.path, group, lineage }) ?? {};
|
|
50
|
+
if (!prepared.checks?.length && !prepared.stages?.length)
|
|
51
|
+
throw new Error("Moment case hook must supply terminal checks or stages");
|
|
52
|
+
const trainingMoment = { version: "spawnfile.training-moment-case.v1", projectRoot: project.root,
|
|
53
|
+
agent: plan.agent.id, example: `${role}:${example.id}`, role, dataset: dataset.path, at: moment.at, effectiveAt: moment.effectiveAt,
|
|
54
|
+
wake: example.wake, group, lineage, momentRoot, ...(historyDir ? { historyDir } : {}),
|
|
55
|
+
hook: plan.preparation?.hook ?? "spawnfile/rewind" };
|
|
56
|
+
records[role].push({ ...prepared, id: example.id, group, lineage: [lineage],
|
|
57
|
+
input: { message: { network: example.wake.surface, sender: example.wake.from,
|
|
58
|
+
target: example.wake.room, text: example.wake.text } },
|
|
59
|
+
setup: { ...prepared.setup, trainingMoment }, context: { ...prepared.context, trainingMomentProvenance: moment } });
|
|
60
|
+
entry.status = "materialized";
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
entry.reason = error instanceof Error ? error.message : String(error);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const datasets = {};
|
|
68
|
+
for (const role of roles)
|
|
69
|
+
if (declared.has(role)) {
|
|
70
|
+
datasets[role] = path.join(out, `${role}.paideia.json`);
|
|
71
|
+
await save(datasets[role], { schema: "paideia.dataset.v1", id: `${plan.agent.id}:${role}`, subject: plan.agent.name,
|
|
72
|
+
setup: { profile: plan.preparation?.hook ?? "spawnfile/rewind" }, records: records[role] });
|
|
73
|
+
}
|
|
74
|
+
const report = { version: "spawnfile.training-moment-lowering.v1", agent: plan.agent.id, entries };
|
|
75
|
+
await save(path.join(out, "lowering.json"), report);
|
|
76
|
+
// Keep every refusal on disk, including an all-refused role. Never substitute another split.
|
|
77
|
+
for (const role of declared)
|
|
78
|
+
if (records[role].length === 0)
|
|
79
|
+
throw new Error(`No executable ${role} moments; see ${path.join(out, "lowering.json")}`);
|
|
80
|
+
for (const role of roles) {
|
|
81
|
+
const ids = records[role].map(record => record.id);
|
|
82
|
+
if (new Set(ids).size !== ids.length)
|
|
83
|
+
throw new Error(`Duplicate executable ${role} example IDs across datasets; use unique IDs`);
|
|
84
|
+
}
|
|
85
|
+
return { datasets: datasets, report };
|
|
86
|
+
};
|
|
87
|
+
/** Trial hooks call this on fresh paths; historical identity must match the accepted lowering. */
|
|
88
|
+
export const materializeTrainingCase = async (options) => {
|
|
89
|
+
const { project, plan, moment } = options;
|
|
90
|
+
if (project.root !== moment.projectRoot || plan.agent.id !== moment.agent)
|
|
91
|
+
throw new Error("Trial moment project or agent differs from lowering");
|
|
92
|
+
const targets = plan.targets.filter(target => target.datasets[moment.role]?.path === moment.dataset);
|
|
93
|
+
if (!targets.length)
|
|
94
|
+
throw new Error("Trial moment dataset is not declared");
|
|
95
|
+
const example = targets[0].datasets[moment.role].examples.find(value => `${moment.role}:${value.id}` === moment.example);
|
|
96
|
+
if (!example || !isDeepStrictEqual(example.wake, moment.wake) || normalizeInstant(example.at) !== normalizeInstant(moment.at)) {
|
|
97
|
+
throw new Error("Trial moment wake or instant differs from lowering");
|
|
98
|
+
}
|
|
99
|
+
const file = path.join(moment.momentRoot, "moment.json");
|
|
100
|
+
if (!options.expected) {
|
|
101
|
+
const stat = await lstat(file);
|
|
102
|
+
if (!stat.isFile() || stat.isSymbolicLink() || stat.size > 2_000_000)
|
|
103
|
+
throw new Error("Accepted moment provenance must be a bounded regular file");
|
|
104
|
+
}
|
|
105
|
+
const expected = materializedMomentSchema.parse(options.expected ?? JSON.parse(await readFile(file, "utf8")));
|
|
106
|
+
if (expected.status !== "materialized" || expected.agent !== moment.agent || expected.example.id !== example.id ||
|
|
107
|
+
expected.example.role !== moment.role || expected.example.dataset !== moment.dataset || expected.at !== moment.at ||
|
|
108
|
+
expected.effectiveAt !== moment.effectiveAt || !expected.leakCheck.ok)
|
|
109
|
+
throw new Error("Accepted moment provenance differs from lowering");
|
|
110
|
+
const result = await materializeTrainingMoment({ project, plan: { ...plan, targets }, example: moment.example,
|
|
111
|
+
historyDir: moment.historyDir, out: options.out });
|
|
112
|
+
if (result.status !== "materialized" || result.effectiveAt !== moment.effectiveAt)
|
|
113
|
+
throw new Error("Trial rewind refused or historical start instant changed");
|
|
114
|
+
if (!isDeepStrictEqual(result.inputs, expected.inputs) || !isDeepStrictEqual(result.record, expected.record)) {
|
|
115
|
+
throw new Error("Trial rewind provenance differs from accepted lowering");
|
|
116
|
+
}
|
|
117
|
+
return result;
|
|
118
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { within } from "./preparation/files.js";
|
|
4
|
+
/** Durable default namespace disjoint from every declared input, even a project ancestor. */
|
|
5
|
+
export const defaultTrainingOutputRoot = (projectRoot, inputs = []) => {
|
|
6
|
+
const sources = [projectRoot, ...inputs].map(source => path.resolve(source));
|
|
7
|
+
if (sources.includes(path.parse(projectRoot).root))
|
|
8
|
+
throw Error("No training output location exists outside declared inputs; supply --out");
|
|
9
|
+
const identity = createHash("sha256").update(projectRoot).digest("hex").slice(0, 16);
|
|
10
|
+
let ancestor = path.dirname(projectRoot);
|
|
11
|
+
for (;;) {
|
|
12
|
+
const candidate = path.join(ancestor, ".spawn-training", `${path.basename(projectRoot)}-${identity}`);
|
|
13
|
+
if (!sources.some(source => within(source, candidate) || within(candidate, source)))
|
|
14
|
+
return candidate;
|
|
15
|
+
const parent = path.dirname(ancestor);
|
|
16
|
+
if (parent === ancestor)
|
|
17
|
+
throw Error("No training output location exists outside declared inputs; supply --out");
|
|
18
|
+
ancestor = parent;
|
|
19
|
+
}
|
|
20
|
+
};
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const TRAINING_PLAN_VERSION: "spawnfile.training-plan.v1";
|
|
3
|
+
export declare const trainingPlanDatasetSchema: z.ZodObject<{
|
|
4
|
+
sourcePath: z.ZodString;
|
|
5
|
+
path: z.ZodString;
|
|
6
|
+
examples: z.ZodArray<z.ZodObject<{
|
|
7
|
+
id: z.ZodString;
|
|
8
|
+
at: z.ZodISODateTime;
|
|
9
|
+
wake: z.ZodObject<{
|
|
10
|
+
surface: z.ZodLiteral<"moltnet">;
|
|
11
|
+
room: z.ZodString;
|
|
12
|
+
from: z.ZodString;
|
|
13
|
+
text: z.ZodString;
|
|
14
|
+
}, z.core.$strict>;
|
|
15
|
+
overrides: z.ZodArray<z.ZodObject<{
|
|
16
|
+
id: z.ZodString;
|
|
17
|
+
declaredBy: z.ZodString;
|
|
18
|
+
section: z.ZodEnum<{
|
|
19
|
+
memory: "memory";
|
|
20
|
+
resources: "resources";
|
|
21
|
+
networks: "networks";
|
|
22
|
+
}>;
|
|
23
|
+
}, z.core.$strict>>;
|
|
24
|
+
}, z.core.$strict>>;
|
|
25
|
+
}, z.core.$strict>;
|
|
26
|
+
export declare const trainingPlanOptimizerSchema: z.ZodObject<{
|
|
27
|
+
method: z.ZodString;
|
|
28
|
+
model: z.ZodString;
|
|
29
|
+
variants: z.ZodNumber;
|
|
30
|
+
keep: z.ZodNumber;
|
|
31
|
+
budget: z.ZodObject<{
|
|
32
|
+
rounds: z.ZodNumber;
|
|
33
|
+
}, z.core.$strict>;
|
|
34
|
+
}, z.core.$strict>;
|
|
35
|
+
export declare const trainingPlanSchema: z.ZodObject<{
|
|
36
|
+
version: z.ZodLiteral<"spawnfile.training-plan.v1">;
|
|
37
|
+
producer: z.ZodObject<{
|
|
38
|
+
package: z.ZodLiteral<"spawnfile">;
|
|
39
|
+
version: z.ZodString;
|
|
40
|
+
}, z.core.$strict>;
|
|
41
|
+
project: z.ZodObject<{
|
|
42
|
+
root: z.ZodString;
|
|
43
|
+
manifest: z.ZodString;
|
|
44
|
+
}, z.core.$strict>;
|
|
45
|
+
agent: z.ZodObject<{
|
|
46
|
+
id: z.ZodString;
|
|
47
|
+
name: z.ZodString;
|
|
48
|
+
}, z.core.$strict>;
|
|
49
|
+
deadlines: z.ZodOptional<z.ZodObject<{
|
|
50
|
+
experiment_ms: z.ZodNumber;
|
|
51
|
+
trial_ms: z.ZodOptional<z.ZodNumber>;
|
|
52
|
+
}, z.core.$strict>>;
|
|
53
|
+
preparation: z.ZodOptional<z.ZodObject<{
|
|
54
|
+
hook: z.ZodString;
|
|
55
|
+
history: z.ZodOptional<z.ZodString>;
|
|
56
|
+
}, z.core.$strict>>;
|
|
57
|
+
record: z.ZodNullable<z.ZodObject<{
|
|
58
|
+
keep: z.ZodNullable<z.ZodString>;
|
|
59
|
+
volumes: z.ZodArray<z.ZodObject<{
|
|
60
|
+
id: z.ZodString;
|
|
61
|
+
declaredBy: z.ZodString;
|
|
62
|
+
}, z.core.$strict>>;
|
|
63
|
+
}, z.core.$strict>>;
|
|
64
|
+
optimizer: z.ZodNullable<z.ZodObject<{
|
|
65
|
+
method: z.ZodString;
|
|
66
|
+
model: z.ZodString;
|
|
67
|
+
variants: z.ZodNumber;
|
|
68
|
+
keep: z.ZodNumber;
|
|
69
|
+
budget: z.ZodObject<{
|
|
70
|
+
rounds: z.ZodNumber;
|
|
71
|
+
}, z.core.$strict>;
|
|
72
|
+
}, z.core.$strict>>;
|
|
73
|
+
graders: z.ZodArray<z.ZodObject<{
|
|
74
|
+
sourcePath: z.ZodString;
|
|
75
|
+
path: z.ZodString;
|
|
76
|
+
name: z.ZodString;
|
|
77
|
+
declaredBy: z.ZodString;
|
|
78
|
+
}, z.core.$strict>>;
|
|
79
|
+
targets: z.ZodArray<z.ZodObject<{
|
|
80
|
+
declaredBy: z.ZodString;
|
|
81
|
+
grader: z.ZodString;
|
|
82
|
+
files: z.ZodArray<z.ZodObject<{
|
|
83
|
+
sourcePath: z.ZodString;
|
|
84
|
+
path: z.ZodString;
|
|
85
|
+
consumers: z.ZodArray<z.ZodString>;
|
|
86
|
+
}, z.core.$strict>>;
|
|
87
|
+
datasets: z.ZodObject<{
|
|
88
|
+
train: z.ZodObject<{
|
|
89
|
+
sourcePath: z.ZodString;
|
|
90
|
+
path: z.ZodString;
|
|
91
|
+
examples: z.ZodArray<z.ZodObject<{
|
|
92
|
+
id: z.ZodString;
|
|
93
|
+
at: z.ZodISODateTime;
|
|
94
|
+
wake: z.ZodObject<{
|
|
95
|
+
surface: z.ZodLiteral<"moltnet">;
|
|
96
|
+
room: z.ZodString;
|
|
97
|
+
from: z.ZodString;
|
|
98
|
+
text: z.ZodString;
|
|
99
|
+
}, z.core.$strict>;
|
|
100
|
+
overrides: z.ZodArray<z.ZodObject<{
|
|
101
|
+
id: z.ZodString;
|
|
102
|
+
declaredBy: z.ZodString;
|
|
103
|
+
section: z.ZodEnum<{
|
|
104
|
+
memory: "memory";
|
|
105
|
+
resources: "resources";
|
|
106
|
+
networks: "networks";
|
|
107
|
+
}>;
|
|
108
|
+
}, z.core.$strict>>;
|
|
109
|
+
}, z.core.$strict>>;
|
|
110
|
+
}, z.core.$strict>;
|
|
111
|
+
validation: z.ZodNullable<z.ZodObject<{
|
|
112
|
+
sourcePath: z.ZodString;
|
|
113
|
+
path: z.ZodString;
|
|
114
|
+
examples: z.ZodArray<z.ZodObject<{
|
|
115
|
+
id: z.ZodString;
|
|
116
|
+
at: z.ZodISODateTime;
|
|
117
|
+
wake: z.ZodObject<{
|
|
118
|
+
surface: z.ZodLiteral<"moltnet">;
|
|
119
|
+
room: z.ZodString;
|
|
120
|
+
from: z.ZodString;
|
|
121
|
+
text: z.ZodString;
|
|
122
|
+
}, z.core.$strict>;
|
|
123
|
+
overrides: z.ZodArray<z.ZodObject<{
|
|
124
|
+
id: z.ZodString;
|
|
125
|
+
declaredBy: z.ZodString;
|
|
126
|
+
section: z.ZodEnum<{
|
|
127
|
+
memory: "memory";
|
|
128
|
+
resources: "resources";
|
|
129
|
+
networks: "networks";
|
|
130
|
+
}>;
|
|
131
|
+
}, z.core.$strict>>;
|
|
132
|
+
}, z.core.$strict>>;
|
|
133
|
+
}, z.core.$strict>>;
|
|
134
|
+
test: z.ZodObject<{
|
|
135
|
+
sourcePath: z.ZodString;
|
|
136
|
+
path: z.ZodString;
|
|
137
|
+
examples: z.ZodArray<z.ZodObject<{
|
|
138
|
+
id: z.ZodString;
|
|
139
|
+
at: z.ZodISODateTime;
|
|
140
|
+
wake: z.ZodObject<{
|
|
141
|
+
surface: z.ZodLiteral<"moltnet">;
|
|
142
|
+
room: z.ZodString;
|
|
143
|
+
from: z.ZodString;
|
|
144
|
+
text: z.ZodString;
|
|
145
|
+
}, z.core.$strict>;
|
|
146
|
+
overrides: z.ZodArray<z.ZodObject<{
|
|
147
|
+
id: z.ZodString;
|
|
148
|
+
declaredBy: z.ZodString;
|
|
149
|
+
section: z.ZodEnum<{
|
|
150
|
+
memory: "memory";
|
|
151
|
+
resources: "resources";
|
|
152
|
+
networks: "networks";
|
|
153
|
+
}>;
|
|
154
|
+
}, z.core.$strict>>;
|
|
155
|
+
}, z.core.$strict>>;
|
|
156
|
+
}, z.core.$strict>;
|
|
157
|
+
}, z.core.$strict>;
|
|
158
|
+
}, z.core.$strict>>;
|
|
159
|
+
}, z.core.$strict>;
|
|
160
|
+
export type TrainingPlan = z.infer<typeof trainingPlanSchema>;
|
|
161
|
+
export type TrainingPlanDataset = z.infer<typeof trainingPlanDatasetSchema>;
|
|
162
|
+
export type TrainingPlanOverride = TrainingPlanDataset["examples"][number]["overrides"][number];
|
|
163
|
+
export declare const trainingPlanJsonSchema: z.core.ZodStandardJSONSchemaPayload<z.ZodObject<{
|
|
164
|
+
version: z.ZodLiteral<"spawnfile.training-plan.v1">;
|
|
165
|
+
producer: z.ZodObject<{
|
|
166
|
+
package: z.ZodLiteral<"spawnfile">;
|
|
167
|
+
version: z.ZodString;
|
|
168
|
+
}, z.core.$strict>;
|
|
169
|
+
project: z.ZodObject<{
|
|
170
|
+
root: z.ZodString;
|
|
171
|
+
manifest: z.ZodString;
|
|
172
|
+
}, z.core.$strict>;
|
|
173
|
+
agent: z.ZodObject<{
|
|
174
|
+
id: z.ZodString;
|
|
175
|
+
name: z.ZodString;
|
|
176
|
+
}, z.core.$strict>;
|
|
177
|
+
deadlines: z.ZodOptional<z.ZodObject<{
|
|
178
|
+
experiment_ms: z.ZodNumber;
|
|
179
|
+
trial_ms: z.ZodOptional<z.ZodNumber>;
|
|
180
|
+
}, z.core.$strict>>;
|
|
181
|
+
preparation: z.ZodOptional<z.ZodObject<{
|
|
182
|
+
hook: z.ZodString;
|
|
183
|
+
history: z.ZodOptional<z.ZodString>;
|
|
184
|
+
}, z.core.$strict>>;
|
|
185
|
+
record: z.ZodNullable<z.ZodObject<{
|
|
186
|
+
keep: z.ZodNullable<z.ZodString>;
|
|
187
|
+
volumes: z.ZodArray<z.ZodObject<{
|
|
188
|
+
id: z.ZodString;
|
|
189
|
+
declaredBy: z.ZodString;
|
|
190
|
+
}, z.core.$strict>>;
|
|
191
|
+
}, z.core.$strict>>;
|
|
192
|
+
optimizer: z.ZodNullable<z.ZodObject<{
|
|
193
|
+
method: z.ZodString;
|
|
194
|
+
model: z.ZodString;
|
|
195
|
+
variants: z.ZodNumber;
|
|
196
|
+
keep: z.ZodNumber;
|
|
197
|
+
budget: z.ZodObject<{
|
|
198
|
+
rounds: z.ZodNumber;
|
|
199
|
+
}, z.core.$strict>;
|
|
200
|
+
}, z.core.$strict>>;
|
|
201
|
+
graders: z.ZodArray<z.ZodObject<{
|
|
202
|
+
sourcePath: z.ZodString;
|
|
203
|
+
path: z.ZodString;
|
|
204
|
+
name: z.ZodString;
|
|
205
|
+
declaredBy: z.ZodString;
|
|
206
|
+
}, z.core.$strict>>;
|
|
207
|
+
targets: z.ZodArray<z.ZodObject<{
|
|
208
|
+
declaredBy: z.ZodString;
|
|
209
|
+
grader: z.ZodString;
|
|
210
|
+
files: z.ZodArray<z.ZodObject<{
|
|
211
|
+
sourcePath: z.ZodString;
|
|
212
|
+
path: z.ZodString;
|
|
213
|
+
consumers: z.ZodArray<z.ZodString>;
|
|
214
|
+
}, z.core.$strict>>;
|
|
215
|
+
datasets: z.ZodObject<{
|
|
216
|
+
train: z.ZodObject<{
|
|
217
|
+
sourcePath: z.ZodString;
|
|
218
|
+
path: z.ZodString;
|
|
219
|
+
examples: z.ZodArray<z.ZodObject<{
|
|
220
|
+
id: z.ZodString;
|
|
221
|
+
at: z.ZodISODateTime;
|
|
222
|
+
wake: z.ZodObject<{
|
|
223
|
+
surface: z.ZodLiteral<"moltnet">;
|
|
224
|
+
room: z.ZodString;
|
|
225
|
+
from: z.ZodString;
|
|
226
|
+
text: z.ZodString;
|
|
227
|
+
}, z.core.$strict>;
|
|
228
|
+
overrides: z.ZodArray<z.ZodObject<{
|
|
229
|
+
id: z.ZodString;
|
|
230
|
+
declaredBy: z.ZodString;
|
|
231
|
+
section: z.ZodEnum<{
|
|
232
|
+
memory: "memory";
|
|
233
|
+
resources: "resources";
|
|
234
|
+
networks: "networks";
|
|
235
|
+
}>;
|
|
236
|
+
}, z.core.$strict>>;
|
|
237
|
+
}, z.core.$strict>>;
|
|
238
|
+
}, z.core.$strict>;
|
|
239
|
+
validation: z.ZodNullable<z.ZodObject<{
|
|
240
|
+
sourcePath: z.ZodString;
|
|
241
|
+
path: z.ZodString;
|
|
242
|
+
examples: z.ZodArray<z.ZodObject<{
|
|
243
|
+
id: z.ZodString;
|
|
244
|
+
at: z.ZodISODateTime;
|
|
245
|
+
wake: z.ZodObject<{
|
|
246
|
+
surface: z.ZodLiteral<"moltnet">;
|
|
247
|
+
room: z.ZodString;
|
|
248
|
+
from: z.ZodString;
|
|
249
|
+
text: z.ZodString;
|
|
250
|
+
}, z.core.$strict>;
|
|
251
|
+
overrides: z.ZodArray<z.ZodObject<{
|
|
252
|
+
id: z.ZodString;
|
|
253
|
+
declaredBy: z.ZodString;
|
|
254
|
+
section: z.ZodEnum<{
|
|
255
|
+
memory: "memory";
|
|
256
|
+
resources: "resources";
|
|
257
|
+
networks: "networks";
|
|
258
|
+
}>;
|
|
259
|
+
}, z.core.$strict>>;
|
|
260
|
+
}, z.core.$strict>>;
|
|
261
|
+
}, z.core.$strict>>;
|
|
262
|
+
test: z.ZodObject<{
|
|
263
|
+
sourcePath: z.ZodString;
|
|
264
|
+
path: z.ZodString;
|
|
265
|
+
examples: z.ZodArray<z.ZodObject<{
|
|
266
|
+
id: z.ZodString;
|
|
267
|
+
at: z.ZodISODateTime;
|
|
268
|
+
wake: z.ZodObject<{
|
|
269
|
+
surface: z.ZodLiteral<"moltnet">;
|
|
270
|
+
room: z.ZodString;
|
|
271
|
+
from: z.ZodString;
|
|
272
|
+
text: z.ZodString;
|
|
273
|
+
}, z.core.$strict>;
|
|
274
|
+
overrides: z.ZodArray<z.ZodObject<{
|
|
275
|
+
id: z.ZodString;
|
|
276
|
+
declaredBy: z.ZodString;
|
|
277
|
+
section: z.ZodEnum<{
|
|
278
|
+
memory: "memory";
|
|
279
|
+
resources: "resources";
|
|
280
|
+
networks: "networks";
|
|
281
|
+
}>;
|
|
282
|
+
}, z.core.$strict>>;
|
|
283
|
+
}, z.core.$strict>>;
|
|
284
|
+
}, z.core.$strict>;
|
|
285
|
+
}, z.core.$strict>;
|
|
286
|
+
}, z.core.$strict>>;
|
|
287
|
+
}, z.core.$strict>>;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { trainingInstantSchema, trainingWakeSchema } from "../../../manifest/index.js";
|
|
3
|
+
export const TRAINING_PLAN_VERSION = "spawnfile.training-plan.v1";
|
|
4
|
+
const text = z.string().min(1);
|
|
5
|
+
const absolutePath = text.regex(/^(?:\/|[A-Za-z]:[\\/])/u);
|
|
6
|
+
const relativePath = text.regex(/^(?!\/)[^\\]+$/u);
|
|
7
|
+
const source = z.object({ sourcePath: absolutePath, path: relativePath }).strict();
|
|
8
|
+
const reference = z.object({ id: text, declaredBy: text }).strict();
|
|
9
|
+
export const trainingPlanDatasetSchema = source.extend({
|
|
10
|
+
examples: z.array(z.object({
|
|
11
|
+
id: text.regex(/^[A-Za-z0-9._-]+$/u),
|
|
12
|
+
at: trainingInstantSchema,
|
|
13
|
+
wake: trainingWakeSchema,
|
|
14
|
+
overrides: z.array(reference.extend({ section: z.enum(["resources", "memory", "networks"]) }).strict())
|
|
15
|
+
}).strict()).min(1)
|
|
16
|
+
}).strict();
|
|
17
|
+
export const trainingPlanOptimizerSchema = z.object({
|
|
18
|
+
method: text, model: text, variants: z.number().int().min(1), keep: z.number().int().min(1),
|
|
19
|
+
budget: z.object({ rounds: z.number().int().min(1) }).strict()
|
|
20
|
+
}).strict();
|
|
21
|
+
export const trainingPlanSchema = z.object({
|
|
22
|
+
version: z.literal(TRAINING_PLAN_VERSION),
|
|
23
|
+
producer: z.object({ package: z.literal("spawnfile"), version: text }).strict(),
|
|
24
|
+
project: z.object({ root: absolutePath, manifest: absolutePath }).strict(),
|
|
25
|
+
agent: z.object({ id: text, name: text }).strict(),
|
|
26
|
+
deadlines: z.object({
|
|
27
|
+
experiment_ms: z.number().int().min(1).max(604_800_000),
|
|
28
|
+
trial_ms: z.number().int().min(1).max(86_400_000).optional()
|
|
29
|
+
}).strict().optional(),
|
|
30
|
+
preparation: z.object({ hook: text, history: absolutePath.optional() }).strict().optional(),
|
|
31
|
+
record: z.object({
|
|
32
|
+
keep: text.regex(/^[1-9][0-9]*[mhd]$/u).nullable(),
|
|
33
|
+
volumes: z.array(reference)
|
|
34
|
+
}).strict().nullable(),
|
|
35
|
+
optimizer: trainingPlanOptimizerSchema.nullable(),
|
|
36
|
+
graders: z.array(source.extend({
|
|
37
|
+
name: text.regex(/^[A-Za-z0-9_-]+$/u), declaredBy: text
|
|
38
|
+
}).strict()),
|
|
39
|
+
targets: z.array(z.object({
|
|
40
|
+
declaredBy: text, grader: text.regex(/^[A-Za-z0-9_-]+$/u),
|
|
41
|
+
files: z.array(source.extend({ consumers: z.array(text).min(1) }).strict()).min(1),
|
|
42
|
+
datasets: z.object({
|
|
43
|
+
train: trainingPlanDatasetSchema,
|
|
44
|
+
validation: trainingPlanDatasetSchema.nullable(),
|
|
45
|
+
test: trainingPlanDatasetSchema
|
|
46
|
+
}).strict()
|
|
47
|
+
}).strict())
|
|
48
|
+
}).strict();
|
|
49
|
+
export const trainingPlanJsonSchema = z.toJSONSchema(trainingPlanSchema);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { TrainingPlan } from "./contract.js";
|
|
2
|
+
import type { LoadedTrainingProject } from "./types.js";
|
|
3
|
+
/** Local reads only. Loading preserves complete declarations; resolution projects public identities. */
|
|
4
|
+
export declare const loadTrainingProject: (inputPath: string) => Promise<LoadedTrainingProject>;
|
|
5
|
+
export interface CreateTrainingPlanOptions {
|
|
6
|
+
agent?: string;
|
|
7
|
+
packageVersion: string;
|
|
8
|
+
}
|
|
9
|
+
export declare const createTrainingPlan: (inputPath: string, options: CreateTrainingPlanOptions) => Promise<TrainingPlan>;
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { lstat, readFile, realpath, stat } from "node:fs/promises";
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { parse as parseYaml } from "yaml";
|
|
5
|
+
import { getManifestPath, resolveProjectPath } from "../../../filesystem/index.js";
|
|
6
|
+
import { isInlineAgentMember, isReferencedMember, trainingDatasetSchema } from "../../../manifest/index.js";
|
|
7
|
+
import { parseManifest } from "../../../manifest/parseManifest.js";
|
|
8
|
+
import { buildCompilePlan } from "../../buildCompilePlan.js";
|
|
9
|
+
import { invalidTraining } from "./references.js";
|
|
10
|
+
import { resolveTrainingPlan } from "./resolve.js";
|
|
11
|
+
const source = (root, sourcePath) => ({
|
|
12
|
+
sourcePath, path: path.relative(root, sourcePath).split(path.sep).join("/")
|
|
13
|
+
});
|
|
14
|
+
const reason = (error) => error instanceof Error ? error.message : String(error);
|
|
15
|
+
const inside = (root, file) => {
|
|
16
|
+
const relative = path.relative(root, file);
|
|
17
|
+
return relative !== "" && relative !== ".." && !relative.startsWith(`..${path.sep}`) && !path.isAbsolute(relative);
|
|
18
|
+
};
|
|
19
|
+
/** Training-only preflight preserves target diagnostics before the compiler reads docs/skills. */
|
|
20
|
+
const validateTrainingTargetSources = async (manifestPath, visited = new Set()) => {
|
|
21
|
+
const realManifest = await realpath(manifestPath).catch((error) => invalidTraining(`Unable to load training manifest ${manifestPath}: ${reason(error)}`));
|
|
22
|
+
if (visited.has(realManifest))
|
|
23
|
+
return;
|
|
24
|
+
visited.add(realManifest);
|
|
25
|
+
const manifest = parseManifest(await readFile(manifestPath, "utf8"), manifestPath);
|
|
26
|
+
const declarations = manifest.kind === "agent"
|
|
27
|
+
? [{ declaredBy: `agent:${manifest.name}`, training: manifest.training }]
|
|
28
|
+
: [
|
|
29
|
+
{ declaredBy: `team:${manifest.name}`, training: manifest.shared?.training },
|
|
30
|
+
...manifest.members.filter(isInlineAgentMember).map((member) => ({
|
|
31
|
+
declaredBy: `agent:${member.id}`, training: member.training
|
|
32
|
+
}))
|
|
33
|
+
];
|
|
34
|
+
for (const { declaredBy, training } of declarations) {
|
|
35
|
+
for (const target of training?.targets ?? []) {
|
|
36
|
+
for (const file of target.files) {
|
|
37
|
+
const sourcePath = resolveProjectPath(manifestPath, file);
|
|
38
|
+
const context = `Training target ${sourcePath} declared by ${declaredBy} (${manifestPath})`;
|
|
39
|
+
const stats = await lstat(sourcePath).catch((error) => invalidTraining(`${context} must be an existing regular .md file: ${reason(error)}`));
|
|
40
|
+
if (stats.isSymbolicLink())
|
|
41
|
+
invalidTraining(`${context} must not be a symlink`);
|
|
42
|
+
if (!stats.isFile())
|
|
43
|
+
invalidTraining(`${context} must be an existing regular .md file`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
const refs = manifest.kind === "team"
|
|
48
|
+
? manifest.members.filter(isReferencedMember).map((member) => member.ref)
|
|
49
|
+
: (manifest.subagents ?? []).map((subagent) => subagent.ref);
|
|
50
|
+
for (const ref of refs) {
|
|
51
|
+
await validateTrainingTargetSources(getManifestPath(resolveProjectPath(manifestPath, ref)), visited);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
const readYaml = async (file, schema, declaredBy) => {
|
|
55
|
+
try {
|
|
56
|
+
const bytes = await readFile(file);
|
|
57
|
+
return { value: schema.parse(parseYaml(bytes.toString("utf8"), { strict: true, uniqueKeys: true })),
|
|
58
|
+
sha256: `sha256:${createHash("sha256").update(bytes).digest("hex")}` };
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
return invalidTraining(`Invalid training file ${file} declared by ${declaredBy}: ${reason(error)}`);
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
const loadDataFileSource = async (root, file, declaredBy) => {
|
|
65
|
+
const context = `Invalid training file ${file} declared by ${declaredBy}:`;
|
|
66
|
+
if (!inside(root, file))
|
|
67
|
+
invalidTraining(`${context} must be inside project root ${root}`);
|
|
68
|
+
const realPath = await realpath(file).catch((error) => invalidTraining(`${context} must be an existing regular file: ${reason(error)}`));
|
|
69
|
+
if (!inside(root, realPath))
|
|
70
|
+
invalidTraining(`${context} must be inside project root ${root} (no symlink escape)`);
|
|
71
|
+
const stats = await stat(file).catch((error) => invalidTraining(`${context} must be an existing regular file: ${reason(error)}`));
|
|
72
|
+
if (!stats.isFile())
|
|
73
|
+
invalidTraining(`${context} must be an existing regular file`);
|
|
74
|
+
return source(root, file);
|
|
75
|
+
};
|
|
76
|
+
/** Inspect every ancestor, including unreferenced Spawnfiles outside the compiled graph. */
|
|
77
|
+
const nestedManifests = async (directory, file) => {
|
|
78
|
+
if (!inside(directory, file))
|
|
79
|
+
return [];
|
|
80
|
+
const manifests = [];
|
|
81
|
+
for (let ancestor = path.dirname(file); ancestor !== directory; ancestor = path.dirname(ancestor)) {
|
|
82
|
+
const manifest = path.join(ancestor, "Spawnfile");
|
|
83
|
+
try {
|
|
84
|
+
if ((await stat(manifest)).isFile())
|
|
85
|
+
manifests.push(manifest);
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
if (error.code !== "ENOENT") {
|
|
89
|
+
invalidTraining(`Unable to inspect nested Spawnfile ${manifest} for training target ${file}: ${reason(error)}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return manifests;
|
|
94
|
+
};
|
|
95
|
+
const loadTargetFile = async (root, directory, realDirectory, file) => {
|
|
96
|
+
const result = { ...source(root, file), realPath: null, regular: false, nestedManifests: [] };
|
|
97
|
+
try {
|
|
98
|
+
result.realPath = await realpath(file);
|
|
99
|
+
result.regular = (await stat(file)).isFile();
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
result.error = reason(error);
|
|
103
|
+
return result;
|
|
104
|
+
}
|
|
105
|
+
result.nestedManifests = [...new Set([
|
|
106
|
+
...await nestedManifests(directory, file),
|
|
107
|
+
...await nestedManifests(realDirectory, result.realPath)
|
|
108
|
+
])].sort();
|
|
109
|
+
return result;
|
|
110
|
+
};
|
|
111
|
+
/** Local reads only. Loading preserves complete declarations; resolution projects public identities. */
|
|
112
|
+
export const loadTrainingProject = async (inputPath) => {
|
|
113
|
+
let manifest;
|
|
114
|
+
try {
|
|
115
|
+
manifest = await realpath(getManifestPath(inputPath));
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
return invalidTraining(`Unable to load training project ${inputPath}: ${reason(error)}`);
|
|
119
|
+
}
|
|
120
|
+
await validateTrainingTargetSources(manifest);
|
|
121
|
+
const compilePlan = await buildCompilePlan(manifest);
|
|
122
|
+
const root = path.dirname(compilePlan.root);
|
|
123
|
+
const project = { root, manifest, compilePlan, targets: [], datasets: {}, graders: {} };
|
|
124
|
+
for (const node of compilePlan.nodes) {
|
|
125
|
+
const training = node.value.training;
|
|
126
|
+
if (!training)
|
|
127
|
+
continue;
|
|
128
|
+
const manifestPath = node.value.kind === "agent" ? node.value.sourcePath ?? node.value.source : node.value.source;
|
|
129
|
+
const directory = path.dirname(manifestPath);
|
|
130
|
+
const realDirectory = await realpath(directory);
|
|
131
|
+
for (const grader of Object.values(training.graders)) {
|
|
132
|
+
if (project.graders[grader.sourcePath])
|
|
133
|
+
continue;
|
|
134
|
+
project.graders[grader.sourcePath] = await loadDataFileSource(root, grader.sourcePath, grader.declaredBy);
|
|
135
|
+
}
|
|
136
|
+
for (const declaration of training.targets) {
|
|
137
|
+
const target = {
|
|
138
|
+
declaredBy: node.id, kind: node.kind, directory, realDirectory, declaration,
|
|
139
|
+
files: await Promise.all(declaration.files.map((file) => loadTargetFile(root, directory, realDirectory, file)))
|
|
140
|
+
};
|
|
141
|
+
project.targets.push(target);
|
|
142
|
+
for (const file of Object.values(declaration.datasets)) {
|
|
143
|
+
if (!file || project.datasets[file])
|
|
144
|
+
continue;
|
|
145
|
+
project.datasets[file] = {
|
|
146
|
+
...await loadDataFileSource(root, file, node.id), ...await readYaml(file, trainingDatasetSchema, node.id)
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return project;
|
|
152
|
+
};
|
|
153
|
+
export const createTrainingPlan = async (inputPath, options) => resolveTrainingPlan(await loadTrainingProject(inputPath), options.agent, options.packageVersion);
|