@farmslot/recipe-cli 0.11.4 → 0.13.0
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/CHANGELOG.md +10 -0
- package/dist/discovery-index.d.ts +9 -0
- package/dist/discovery-index.d.ts.map +1 -1
- package/dist/discovery-index.js +4 -1
- package/dist/discovery-index.js.map +1 -1
- package/dist/harness/adapter-plugins.d.ts +2 -1
- package/dist/harness/adapter-plugins.d.ts.map +1 -1
- package/dist/harness/adapter-plugins.js +1 -1
- package/dist/harness/adapter-plugins.js.map +1 -1
- package/dist/harness/adapters.d.ts +1 -0
- package/dist/harness/adapters.d.ts.map +1 -1
- package/dist/harness/adapters.js +1 -1
- package/dist/harness/adapters.js.map +1 -1
- package/dist/harness/catalog.d.ts +8 -1
- package/dist/harness/catalog.d.ts.map +1 -1
- package/dist/harness/catalog.js +125 -1
- package/dist/harness/catalog.js.map +1 -1
- package/dist/harness/commands/call.d.ts +7 -0
- package/dist/harness/commands/call.d.ts.map +1 -1
- package/dist/harness/commands/call.js +15 -10
- package/dist/harness/commands/call.js.map +1 -1
- package/dist/harness/commands/discover.d.ts +4 -0
- package/dist/harness/commands/discover.d.ts.map +1 -1
- package/dist/harness/commands/discover.js +7 -7
- package/dist/harness/commands/discover.js.map +1 -1
- package/dist/harness/commands/run.d.ts +12 -1
- package/dist/harness/commands/run.d.ts.map +1 -1
- package/dist/harness/commands/run.js +90 -21
- package/dist/harness/commands/run.js.map +1 -1
- package/dist/harness/conformance.d.ts +35 -0
- package/dist/harness/conformance.d.ts.map +1 -0
- package/dist/harness/conformance.js +244 -0
- package/dist/harness/conformance.js.map +1 -0
- package/dist/harness/context-state.d.ts +55 -0
- package/dist/harness/context-state.d.ts.map +1 -1
- package/dist/harness/context-state.js +11 -0
- package/dist/harness/context-state.js.map +1 -1
- package/dist/harness/context.d.ts +51 -2
- package/dist/harness/context.d.ts.map +1 -1
- package/dist/harness/context.js +461 -26
- package/dist/harness/context.js.map +1 -1
- package/dist/harness/execution-provenance.d.ts +9 -5
- package/dist/harness/execution-provenance.d.ts.map +1 -1
- package/dist/harness/execution-provenance.js +56 -5
- package/dist/harness/execution-provenance.js.map +1 -1
- package/dist/harness/harness-cli.d.ts +3 -0
- package/dist/harness/harness-cli.d.ts.map +1 -1
- package/dist/harness/harness-cli.js +9 -3
- package/dist/harness/harness-cli.js.map +1 -1
- package/dist/harness/host.d.ts +10 -0
- package/dist/harness/host.d.ts.map +1 -1
- package/dist/harness/host.js +26 -0
- package/dist/harness/host.js.map +1 -1
- package/dist/harness/index.d.ts +12 -9
- package/dist/harness/index.d.ts.map +1 -1
- package/dist/harness/index.js +12 -9
- package/dist/harness/index.js.map +1 -1
- package/dist/harness/json-stream.d.ts +7 -2
- package/dist/harness/json-stream.d.ts.map +1 -1
- package/dist/harness/json-stream.js +76 -10
- package/dist/harness/json-stream.js.map +1 -1
- package/dist/harness/library-provenance.d.ts +2 -1
- package/dist/harness/library-provenance.d.ts.map +1 -1
- package/dist/harness/library-provenance.js +5 -1
- package/dist/harness/library-provenance.js.map +1 -1
- package/dist/harness/live-adapter-contract.d.ts +1 -1
- package/dist/harness/live-adapter-contract.d.ts.map +1 -1
- package/dist/harness/live-adapter-contract.js +38 -96
- package/dist/harness/live-adapter-contract.js.map +1 -1
- package/dist/harness/parse-args.d.ts +2 -0
- package/dist/harness/parse-args.d.ts.map +1 -1
- package/dist/harness/parse-args.js +4 -1
- package/dist/harness/parse-args.js.map +1 -1
- package/dist/harness/paths.d.ts +4 -0
- package/dist/harness/paths.d.ts.map +1 -1
- package/dist/harness/paths.js +22 -0
- package/dist/harness/paths.js.map +1 -1
- package/dist/harness/project-command.d.ts +11 -0
- package/dist/harness/project-command.d.ts.map +1 -0
- package/dist/harness/project-command.js +32 -0
- package/dist/harness/project-command.js.map +1 -0
- package/dist/harness/project-host.d.ts +22 -0
- package/dist/harness/project-host.d.ts.map +1 -0
- package/dist/harness/project-host.js +201 -0
- package/dist/harness/project-host.js.map +1 -0
- package/dist/harness/recipe-library.d.ts +12 -5
- package/dist/harness/recipe-library.d.ts.map +1 -1
- package/dist/harness/recipe-library.js +27 -8
- package/dist/harness/recipe-library.js.map +1 -1
- package/dist/harness/recipe-validation.d.ts +2 -1
- package/dist/harness/recipe-validation.d.ts.map +1 -1
- package/dist/harness/recipe-validation.js +4 -9
- package/dist/harness/recipe-validation.js.map +1 -1
- package/dist/harness/run-diagnostics.d.ts +2 -0
- package/dist/harness/run-diagnostics.d.ts.map +1 -1
- package/dist/harness/run-diagnostics.js +41 -0
- package/dist/harness/run-diagnostics.js.map +1 -1
- package/dist/harness/run-engine.d.ts +20 -2
- package/dist/harness/run-engine.d.ts.map +1 -1
- package/dist/harness/run-engine.js +227 -21
- package/dist/harness/run-engine.js.map +1 -1
- package/dist/harness/run-options.d.ts +2 -0
- package/dist/harness/run-options.d.ts.map +1 -1
- package/dist/harness/run-options.js +7 -5
- package/dist/harness/run-options.js.map +1 -1
- package/dist/harness/shared.d.ts +1 -0
- package/dist/harness/shared.d.ts.map +1 -1
- package/dist/harness/shared.js +62 -189
- package/dist/harness/shared.js.map +1 -1
- package/package.json +5 -5
package/dist/harness/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { adapterChoices, type AdapterLibraryOptions, type AdapterLoadOptions, adapterPlugin, adapterPluginChecks, AdapterPluginError, type AdapterPluginErrorCode, adapterSelectionFailureOut, composeAdapter, type DeclaredAdapter, declaredAdapterIds, declaredAdapters, ensureAdapterLoaded, type LoadedAdapterPlugin, loadedAdapterPlugins, selectedAdapterId, } from './adapter-plugins.js';
|
|
2
|
-
export { adapterDetectNext, adapterFlags, adapterForPlatform, assertAdapter, configureHarnessAdapters, type DeclaredDetect, detectAdapter, detectAdapterMatch, type DetectEntry, harnessAdapter, harnessAdapters, isPlatformTarget, pickDetected, undetectedAdapterMessage, } from './adapters.js';
|
|
2
|
+
export { adapterDetectNext, adapterFlags, adapterForPlatform, assertAdapter, checkoutRemote, configureHarnessAdapters, type DeclaredDetect, detectAdapter, detectAdapterMatch, type DetectEntry, harnessAdapter, harnessAdapters, isPlatformTarget, pickDetected, undetectedAdapterMessage, } from './adapters.js';
|
|
3
3
|
export { type ArtifactManifestEntry, indexArtifactManifest, readContainedJsonArtifact, writeContainedArtifact, } from './artifact-files.js';
|
|
4
|
-
export { type ActionCapabilitySource, type DescribedAction, describeManifestActions, type RecipeCatalog, type ResolvedActionManifest, } from './catalog.js';
|
|
4
|
+
export { type ActionCapabilitySource, createRuntimeRecipeCatalog, type DescribedAction, describeManifestActions, type RecipeCatalog, type ResolvedActionManifest, type RuntimeRecipeCatalogOptions, } from './catalog.js';
|
|
5
5
|
export { acquireCheckoutLock, type CheckoutLock, type CheckoutLockFailure, trackCheckoutChild, } from './checkout-lock.js';
|
|
6
6
|
export { classifyLogEvent, color, colorEnabled, colorHumanMessage, colorKv, colorLogEvent, colorStatusWord, stripAnsi, } from './cli-color.js';
|
|
7
7
|
export { booleanOption, type CliUsageError, type CliUsageErrorCode, type CommandContract, type ContractedCommand, type ContractFailures, contractOptions, contractPositionals, type ContractValidationOptions, type InvalidChoice, optionalValueOption, type OptionSpec, optionValues, type PositionalSpec, publicCommandTokens, validatePublicInvocation, valueOption, } from './command-contract.js';
|
|
@@ -21,27 +21,30 @@ export { handleStatus, type StatusCommandOptions } from './commands/status.js';
|
|
|
21
21
|
export { changedLines, formatDuration, handleStatusTaskView, renderAcceptanceLines, renderTaskView, runStatusWatch, type StatusWatchDeps, type StatusWatchOptions, } from './commands/status-watch.js';
|
|
22
22
|
export { handleStop, type StopCommandOptions, type StoppedCompanion } from './commands/stop.js';
|
|
23
23
|
export { handleTaskInit, type TaskInitCommandOptions } from './commands/task-init.js';
|
|
24
|
-
export {
|
|
25
|
-
export {
|
|
24
|
+
export { assertConformanceReportCurrent, checkRecipeConformance, conformanceChecksPass, recipeConformanceIdentity, type RecipeConformanceOptions, writeRecipeConformanceReport, } from './conformance.js';
|
|
25
|
+
export { authorizedProjectLibraries, type ConfiguredRecipeProject, contextPorts, formatHarnessContext, loadProjectProvider, type LoadProjectProviderOptions, type ProjectProvider, recipePackageRoot, resolveHarnessContext, type ResolveHarnessContextOptions, resolveProjectContext, type ResolveProjectContextOptions, runtimeContextOwned, } from './context.js';
|
|
26
|
+
export { AdapterAmbiguousError, type AdapterCandidate, contextAdapter, type ContextPortName, type ContextSource, type DetectMatch, type HarnessContext, harnessContext, harnessContextField, ProjectBindingError, type ResolvedProjectBinding, type ResolvedProjectLibrary, setHarnessContext, } from './context-state.js';
|
|
26
27
|
export { createDoctorReport, type DoctorCheck, type DoctorReport, type DoctorReportOptions, type RequiredDoctorChecks, requiredDoctorCheckSummary, type RunnerInstallKind, runnerInstallKind, type RunnerProvenance, runnerProvenance, type RunnerProvenanceOptions, } from './doctor-report.js';
|
|
27
|
-
export { captureExecutionProvenance, type ExecutionProvenanceDrift, executionProvenanceDrift, type ExecutionProvenanceInput, type ExecutionProvenancePhase, type ExecutionProvenanceRecord, type ExecutionProvenanceSnapshot, ProvenanceDriftError, type SourceProvenanceSnapshot, writeExecutionProvenance, } from './execution-provenance.js';
|
|
28
|
+
export { captureExecutionProvenance, type ExecutionProvenanceDrift, executionProvenanceDrift, type ExecutionProvenanceInput, type ExecutionProvenancePhase, type ExecutionProvenanceRecord, type ExecutionProvenanceSnapshot, fileFingerprint, ProvenanceDriftError, providerSourceSnapshot, type SourceProvenanceSnapshot, sourceSnapshot, writeExecutionProvenance, } from './execution-provenance.js';
|
|
28
29
|
export { createHarnessCli, type HarnessCli, type HarnessCliOptions, type HarnessCliResult, type HarnessCommand, type HarnessHelp, type HarnessHelpGroup, type HelpPaint, type HiddenHarnessCommand, type PublicHarnessCommand, } from './harness-cli.js';
|
|
29
30
|
export { checkHealBounds, classifyFailure, conciseFailureForHuman, ensureOverlay, type FailureClass, newHealState, parseHeal, recipeRunning, } from './heal-bounds.js';
|
|
30
|
-
export { configureHarnessHost, type HarnessHost, harnessHost, type HarnessHostConfig, hostEnvName, recipeEnvName, validateRelativeRecipePath, } from './host.js';
|
|
31
|
-
export { JsonStreamWriter } from './json-stream.js';
|
|
31
|
+
export { configureHarnessHost, type HarnessHost, harnessHost, type HarnessHostConfig, hostEnvName, recipeEnvName, validateRelativeRecipePath, withRecipeSignals, } from './host.js';
|
|
32
|
+
export { failStream, JsonStreamWriter } from './json-stream.js';
|
|
32
33
|
export { leafStartFailureMessage, missingShellLeafMessage, resolveLeafInvoke, shellLeafMissing, } from './leaf-invoke.js';
|
|
33
34
|
export { gitLibraryProvenance } from './library-provenance.js';
|
|
34
35
|
export { liveAdapterProcessTimeoutMs, type LiveAdapterRun, type PreparedLiveAdapter, prepareLiveAdapterScript, resolveLiveAdapter, resolveTsxBin, runLiveAdapterScript, } from './live-adapter-contract.js';
|
|
35
36
|
export { runNetworkCaptureAction } from './network-observation.js';
|
|
36
37
|
export { argValue, handleHarness, type HarnessAction, hasArg, type OverlayCommandOptions, type OverlayInstallContext, readRuntimeContextField, resolveRuntimeContextPath, } from './overlay.js';
|
|
37
38
|
export { actionManifestPathOption, adapterOption, applyRuntimeDirOption, applyWatcherPortOption, CliError, type CliOptions, type CliOptionValue, isRecord, optionFlag, optionString, optionStrings, parseArgs, type ParseArgsOptions, type ParsedArgs, parsePort, parseRecipeParamAssignments, requiredOption, resolveAdapter, shellQuote, shellQuoteArg, targetPath, usageError, } from './parse-args.js';
|
|
38
|
-
export { DEFAULT_RECIPE_HARNESS_ROOT, DEFAULT_RECIPE_RUNTIME_DIR, harnessExecutable, PREPARE_PROGRESS_ARTIFACT, recipeHarnessPath, recipeHarnessRoot, recipeRuntimeDir, recipeRuntimePath, } from './paths.js';
|
|
39
|
+
export { DEFAULT_RECIPE_HARNESS_ROOT, DEFAULT_RECIPE_RUNTIME_DIR, harnessExecutable, PREPARE_PROGRESS_ARTIFACT, recipeHarnessPath, recipeHarnessRoot, recipeOutputRoots, recipeRuntimeDir, recipeRuntimePath, } from './paths.js';
|
|
40
|
+
export { isRecipeExecution, parseProjectInvocation, type ProjectCommandInvocation, } from './project-command.js';
|
|
41
|
+
export { type ProjectRecipeHost, type ProjectRecipeHostOptions, withProjectRecipeHost, } from './project-host.js';
|
|
39
42
|
export { type DevicePreview, type FeatureFlagReport, type ReadinessViewOptions, renderFeatureFlagLine, } from './readiness.js';
|
|
40
43
|
export { describeRunnableRecipe, listRunnableRecipes, type RecipeParameterSummary, resolveLibrarySources, runnableLibraryRecipes, type RunnableRecipe, type RunnableRecipeDetail, } from './recipe-library.js';
|
|
41
44
|
export { type RunRecipeStaticValidation, validateActionInputs, validateCommandNodes, validateRunRecipeStatic, } from './recipe-validation.js';
|
|
42
45
|
export { captureHelperPath, captureHelperSupportsCapability, captureHelperSupportsRecordSessionSnapshots, createRecordingTargetProvider, } from './recording-target.js';
|
|
43
46
|
export { beginRunDiagnostics, type CaptureEvidence, type ClassifiedConsoleRecord, collectRunDiagnostics, type ConsoleAllowlist, type ConsoleAllowlistMatch, type ConsoleCaptureSpec, type ConsoleClassifier, type ConsoleEventKey, type ConsoleRecord, finishRunDiagnostics, formatRunDiagnosticsForHuman, readRunDiagnosticsDocument, type RecipeRunEvidence, type RunDiagnosticBaseline, type RunDiagnosticsDocument, type RunSideFinding, verifyConsoleCapture, } from './run-diagnostics.js';
|
|
44
|
-
export { activateRecipeRuntimeEnvironment, countRecipeNodes, preflightRecipe, type PreparedRecipeExecution, type RecipeEngine, type RecipeEngineRunOptions, type RecipeRunnerOptions, runRecipe, type TrustedMutationAuthorizeContext, type TrustedMutationLoadInput, } from './run-engine.js';
|
|
47
|
+
export { activateRecipeRuntimeEnvironment, countRecipeNodes, createDefaultRecipeEngine, type DefaultRecipeEngineOptions, preflightRecipe, type PreparedRecipeExecution, type RecipeEngine, type RecipeEngineRunOptions, type RecipeRunnerOptions, runRecipe, type TrustedMutationAuthorizeContext, type TrustedMutationLoadInput, } from './run-engine.js';
|
|
45
48
|
export { recipeRunOptionsFromCli } from './run-options.js';
|
|
46
49
|
export { type ActiveRecipeRecording, captureActiveRecipeRecordingSnapshot, type RecipeRecordingOptions, startRecipeRecording, stopRecipeRecording, } from './run-recording.js';
|
|
47
50
|
export { executedBrowser, indexProductProvenanceArtifact, recipeCdpPorts, type RunReport, writeRunReport, writeViolationReport, } from './run-report.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/harness/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,cAAc,EACd,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,KAAK,sBAAsB,EAC3B,0BAA0B,EAC1B,cAAc,EACd,KAAK,eAAe,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,KAAK,mBAAmB,EACxB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,wBAAwB,EACxB,KAAK,cAAc,EACnB,aAAa,EACb,kBAAkB,EAClB,KAAK,WAAW,EAChB,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,wBAAwB,GACzB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,KAAK,qBAAqB,EAC1B,qBAAqB,EACrB,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,uBAAuB,EACvB,KAAK,aAAa,EAClB,KAAK,sBAAsB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/harness/index.ts"],"names":[],"mappings":"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"}
|
package/dist/harness/index.js
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
// presets such as `mm-harness`): host identity, runtime paths, the resumability
|
|
3
3
|
// journal, the checkout lock, JSON streaming and colour output.
|
|
4
4
|
export { adapterChoices, adapterPlugin, adapterPluginChecks, AdapterPluginError, adapterSelectionFailureOut, composeAdapter, declaredAdapterIds, declaredAdapters, ensureAdapterLoaded, loadedAdapterPlugins, selectedAdapterId, } from './adapter-plugins.js';
|
|
5
|
-
export { adapterDetectNext, adapterFlags, adapterForPlatform, assertAdapter, configureHarnessAdapters, detectAdapter, detectAdapterMatch, harnessAdapter, harnessAdapters, isPlatformTarget, pickDetected, undetectedAdapterMessage, } from './adapters.js';
|
|
5
|
+
export { adapterDetectNext, adapterFlags, adapterForPlatform, assertAdapter, checkoutRemote, configureHarnessAdapters, detectAdapter, detectAdapterMatch, harnessAdapter, harnessAdapters, isPlatformTarget, pickDetected, undetectedAdapterMessage, } from './adapters.js';
|
|
6
6
|
export { indexArtifactManifest, readContainedJsonArtifact, writeContainedArtifact, } from './artifact-files.js';
|
|
7
|
-
export { describeManifestActions, } from './catalog.js';
|
|
7
|
+
export { createRuntimeRecipeCatalog, describeManifestActions, } from './catalog.js';
|
|
8
8
|
export { acquireCheckoutLock, trackCheckoutChild, } from './checkout-lock.js';
|
|
9
9
|
export { classifyLogEvent, color, colorEnabled, colorHumanMessage, colorKv, colorLogEvent, colorStatusWord, stripAnsi, } from './cli-color.js';
|
|
10
10
|
export { booleanOption, contractOptions, contractPositionals, optionalValueOption, optionValues, publicCommandTokens, validatePublicInvocation, valueOption, } from './command-contract.js';
|
|
@@ -24,27 +24,30 @@ export { handleStatus } from './commands/status.js';
|
|
|
24
24
|
export { changedLines, formatDuration, handleStatusTaskView, renderAcceptanceLines, renderTaskView, runStatusWatch, } from './commands/status-watch.js';
|
|
25
25
|
export { handleStop } from './commands/stop.js';
|
|
26
26
|
export { handleTaskInit } from './commands/task-init.js';
|
|
27
|
-
export {
|
|
28
|
-
export {
|
|
27
|
+
export { assertConformanceReportCurrent, checkRecipeConformance, conformanceChecksPass, recipeConformanceIdentity, writeRecipeConformanceReport, } from './conformance.js';
|
|
28
|
+
export { authorizedProjectLibraries, contextPorts, formatHarnessContext, loadProjectProvider, recipePackageRoot, resolveHarnessContext, resolveProjectContext, runtimeContextOwned, } from './context.js';
|
|
29
|
+
export { AdapterAmbiguousError, contextAdapter, harnessContext, harnessContextField, ProjectBindingError, setHarnessContext, } from './context-state.js';
|
|
29
30
|
export { createDoctorReport, requiredDoctorCheckSummary, runnerInstallKind, runnerProvenance, } from './doctor-report.js';
|
|
30
|
-
export { captureExecutionProvenance, executionProvenanceDrift, ProvenanceDriftError, writeExecutionProvenance, } from './execution-provenance.js';
|
|
31
|
+
export { captureExecutionProvenance, executionProvenanceDrift, fileFingerprint, ProvenanceDriftError, providerSourceSnapshot, sourceSnapshot, writeExecutionProvenance, } from './execution-provenance.js';
|
|
31
32
|
export { createHarnessCli, } from './harness-cli.js';
|
|
32
33
|
export { checkHealBounds, classifyFailure, conciseFailureForHuman, ensureOverlay, newHealState, parseHeal, recipeRunning, } from './heal-bounds.js';
|
|
33
|
-
export { configureHarnessHost, harnessHost, hostEnvName, recipeEnvName, validateRelativeRecipePath, } from './host.js';
|
|
34
|
-
export { JsonStreamWriter } from './json-stream.js';
|
|
34
|
+
export { configureHarnessHost, harnessHost, hostEnvName, recipeEnvName, validateRelativeRecipePath, withRecipeSignals, } from './host.js';
|
|
35
|
+
export { failStream, JsonStreamWriter } from './json-stream.js';
|
|
35
36
|
export { leafStartFailureMessage, missingShellLeafMessage, resolveLeafInvoke, shellLeafMissing, } from './leaf-invoke.js';
|
|
36
37
|
export { gitLibraryProvenance } from './library-provenance.js';
|
|
37
38
|
export { liveAdapterProcessTimeoutMs, prepareLiveAdapterScript, resolveLiveAdapter, resolveTsxBin, runLiveAdapterScript, } from './live-adapter-contract.js';
|
|
38
39
|
export { runNetworkCaptureAction } from './network-observation.js';
|
|
39
40
|
export { argValue, handleHarness, hasArg, readRuntimeContextField, resolveRuntimeContextPath, } from './overlay.js';
|
|
40
41
|
export { actionManifestPathOption, adapterOption, applyRuntimeDirOption, applyWatcherPortOption, CliError, isRecord, optionFlag, optionString, optionStrings, parseArgs, parsePort, parseRecipeParamAssignments, requiredOption, resolveAdapter, shellQuote, shellQuoteArg, targetPath, usageError, } from './parse-args.js';
|
|
41
|
-
export { DEFAULT_RECIPE_HARNESS_ROOT, DEFAULT_RECIPE_RUNTIME_DIR, harnessExecutable, PREPARE_PROGRESS_ARTIFACT, recipeHarnessPath, recipeHarnessRoot, recipeRuntimeDir, recipeRuntimePath, } from './paths.js';
|
|
42
|
+
export { DEFAULT_RECIPE_HARNESS_ROOT, DEFAULT_RECIPE_RUNTIME_DIR, harnessExecutable, PREPARE_PROGRESS_ARTIFACT, recipeHarnessPath, recipeHarnessRoot, recipeOutputRoots, recipeRuntimeDir, recipeRuntimePath, } from './paths.js';
|
|
43
|
+
export { isRecipeExecution, parseProjectInvocation, } from './project-command.js';
|
|
44
|
+
export { withProjectRecipeHost, } from './project-host.js';
|
|
42
45
|
export { renderFeatureFlagLine, } from './readiness.js';
|
|
43
46
|
export { describeRunnableRecipe, listRunnableRecipes, resolveLibrarySources, runnableLibraryRecipes, } from './recipe-library.js';
|
|
44
47
|
export { validateActionInputs, validateCommandNodes, validateRunRecipeStatic, } from './recipe-validation.js';
|
|
45
48
|
export { captureHelperPath, captureHelperSupportsCapability, captureHelperSupportsRecordSessionSnapshots, createRecordingTargetProvider, } from './recording-target.js';
|
|
46
49
|
export { beginRunDiagnostics, collectRunDiagnostics, finishRunDiagnostics, formatRunDiagnosticsForHuman, readRunDiagnosticsDocument, verifyConsoleCapture, } from './run-diagnostics.js';
|
|
47
|
-
export { activateRecipeRuntimeEnvironment, countRecipeNodes, preflightRecipe, runRecipe, } from './run-engine.js';
|
|
50
|
+
export { activateRecipeRuntimeEnvironment, countRecipeNodes, createDefaultRecipeEngine, preflightRecipe, runRecipe, } from './run-engine.js';
|
|
48
51
|
export { recipeRunOptionsFromCli } from './run-options.js';
|
|
49
52
|
export { captureActiveRecipeRecordingSnapshot, startRecipeRecording, stopRecipeRecording, } from './run-recording.js';
|
|
50
53
|
export { executedBrowser, indexProductProvenanceArtifact, recipeCdpPorts, writeRunReport, writeViolationReport, } from './run-report.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/harness/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,gFAAgF;AAChF,gEAAgE;AAChE,OAAO,EACL,cAAc,EAGd,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAElB,0BAA0B,EAC1B,cAAc,EAEd,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EAEnB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,wBAAwB,EAExB,aAAa,EACb,kBAAkB,EAElB,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,wBAAwB,GACzB,MAAM,eAAe,CAAC;AACvB,OAAO,EAEL,qBAAqB,EACrB,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/harness/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
import type { CommandEventStream, StageHandle } from '@farmslot/adapter-sdk';
|
|
2
2
|
type JsonFields = Record<string, unknown>;
|
|
3
|
+
/** Release machine output only after closeout; retain failed invocation output as diagnostics. */
|
|
4
|
+
export declare function deferCommandOutput(): (success: boolean) => void;
|
|
3
5
|
export declare class JsonStreamWriter implements CommandEventStream {
|
|
4
6
|
readonly enabled: boolean;
|
|
5
7
|
readonly command: string;
|
|
6
8
|
private completed;
|
|
9
|
+
private deferredResult;
|
|
7
10
|
private lastError;
|
|
8
11
|
private readonly writeLine;
|
|
9
12
|
private readonly stages;
|
|
10
13
|
constructor(command: string, enabled: boolean, output?: Pick<NodeJS.WriteStream, 'write'>);
|
|
14
|
+
/** Keep progress live, but release error/completion only after the host has closed. */
|
|
15
|
+
deferResult(): () => void;
|
|
11
16
|
isolateStdout(): () => void;
|
|
12
17
|
emit(event: string, fields?: JsonFields): void;
|
|
13
18
|
phase(phase: string, fields?: JsonFields): void;
|
|
@@ -18,10 +23,10 @@ export declare class JsonStreamWriter implements CommandEventStream {
|
|
|
18
23
|
}): StageHandle;
|
|
19
24
|
mutation(mutation: JsonFields): void;
|
|
20
25
|
recovery(code: string): void;
|
|
21
|
-
error(error: JsonFields): void;
|
|
26
|
+
error(error: JsonFields, cause?: unknown): void;
|
|
22
27
|
complete(status: 'pass' | 'fail' | 'unknown', exitCode: number, fields?: JsonFields): void;
|
|
23
28
|
}
|
|
24
29
|
/** Ends a stream on a thrown error: an `error` event, then `complete` (fail). */
|
|
25
|
-
export declare function failStream(stream: JsonStreamWriter, error: unknown, code: string):
|
|
30
|
+
export declare function failStream(stream: JsonStreamWriter, error: unknown, code: string, defaultExitCode?: number): number;
|
|
26
31
|
export {};
|
|
27
32
|
//# sourceMappingURL=json-stream.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-stream.d.ts","sourceRoot":"","sources":["../../src/harness/json-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAI7E,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"json-stream.d.ts","sourceRoot":"","sources":["../../src/harness/json-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAI7E,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAqB1C,kGAAkG;AAClG,wBAAgB,kBAAkB,IAAI,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAuB/D;AAED,qBAAa,gBAAiB,YAAW,kBAAkB;IACzD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAAmC;IACzD,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IACnD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0E;gBAG/F,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,EAChB,MAAM,GAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAkB;IAU5D,uFAAuF;IACvF,WAAW,IAAI,MAAM,IAAI;IAczB,aAAa,IAAI,MAAM,IAAI;IAU3B,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,UAAe,GAAG,IAAI;IAalD,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,UAAe,GAAG,IAAI;IAKnD,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,IAAI;IAKnF,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,WAAW;IAI5E,QAAQ,CAAC,QAAQ,EAAE,UAAU,GAAG,IAAI;IAIpC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI5B,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI;IAyB/C,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,UAAe,GAAG,IAAI;CAY/F;AAED,iFAAiF;AACjF,wBAAgB,UAAU,CACxB,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,MAAM,EACZ,eAAe,SAAI,GAClB,MAAM,CAiBR"}
|
|
@@ -1,5 +1,34 @@
|
|
|
1
1
|
import { recordCommandStage } from './command-journal.js';
|
|
2
2
|
import { createStageReporter } from './stage-progress.js';
|
|
3
|
+
function redirectStdout(write) {
|
|
4
|
+
const original = process.stdout.write;
|
|
5
|
+
process.stdout.write = write;
|
|
6
|
+
return () => {
|
|
7
|
+
if (process.stdout.write === write)
|
|
8
|
+
process.stdout.write = original;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
/** Release machine output only after closeout; retain failed invocation output as diagnostics. */
|
|
12
|
+
export function deferCommandOutput() {
|
|
13
|
+
const chunks = [];
|
|
14
|
+
const write = process.stdout.write.bind(process.stdout);
|
|
15
|
+
const restore = redirectStdout(((chunk, encoding, callback) => {
|
|
16
|
+
chunks.push(typeof chunk === 'string'
|
|
17
|
+
? Buffer.from(chunk, typeof encoding === 'string' ? encoding : 'utf8')
|
|
18
|
+
: Buffer.from(chunk));
|
|
19
|
+
(typeof encoding === 'function' ? encoding : callback)?.();
|
|
20
|
+
return true;
|
|
21
|
+
}));
|
|
22
|
+
return (success) => {
|
|
23
|
+
restore();
|
|
24
|
+
for (const chunk of chunks) {
|
|
25
|
+
if (success)
|
|
26
|
+
write(chunk);
|
|
27
|
+
else
|
|
28
|
+
process.stderr.write(chunk);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
}
|
|
3
32
|
export class JsonStreamWriter {
|
|
4
33
|
constructor(command, enabled, output = process.stdout) {
|
|
5
34
|
this.completed = false;
|
|
@@ -11,16 +40,27 @@ export class JsonStreamWriter {
|
|
|
11
40
|
write(`${line}\n`);
|
|
12
41
|
};
|
|
13
42
|
}
|
|
43
|
+
/** Keep progress live, but release error/completion only after the host has closed. */
|
|
44
|
+
deferResult() {
|
|
45
|
+
const pending = {};
|
|
46
|
+
this.deferredResult = pending;
|
|
47
|
+
return () => {
|
|
48
|
+
if (this.deferredResult !== pending)
|
|
49
|
+
return;
|
|
50
|
+
this.deferredResult = undefined;
|
|
51
|
+
if (pending.error)
|
|
52
|
+
this.error(pending.error);
|
|
53
|
+
if (pending.completion) {
|
|
54
|
+
const { status, exitCode, fields } = pending.completion;
|
|
55
|
+
this.complete(status, exitCode, fields);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
}
|
|
14
59
|
isolateStdout() {
|
|
15
60
|
if (!this.enabled)
|
|
16
61
|
return () => undefined;
|
|
17
|
-
const original = process.stdout.write;
|
|
18
62
|
const redirect = ((chunk, encoding, callback) => process.stderr.write(chunk, encoding, callback));
|
|
19
|
-
|
|
20
|
-
return () => {
|
|
21
|
-
if (process.stdout.write === redirect)
|
|
22
|
-
process.stdout.write = original;
|
|
23
|
-
};
|
|
63
|
+
return redirectStdout(redirect);
|
|
24
64
|
}
|
|
25
65
|
emit(event, fields = {}) {
|
|
26
66
|
if (!this.enabled || this.completed)
|
|
@@ -51,12 +91,37 @@ export class JsonStreamWriter {
|
|
|
51
91
|
recovery(code) {
|
|
52
92
|
this.emit('recovery', { code });
|
|
53
93
|
}
|
|
54
|
-
error(error) {
|
|
94
|
+
error(error, cause) {
|
|
95
|
+
if (this.completed)
|
|
96
|
+
return;
|
|
97
|
+
if (this.deferredResult) {
|
|
98
|
+
const prior = this.deferredResult.error;
|
|
99
|
+
const sameCause = cause !== undefined && cause === this.deferredResult.cause;
|
|
100
|
+
const sameFailure = prior &&
|
|
101
|
+
(cause !== undefined && this.deferredResult.cause !== undefined
|
|
102
|
+
? sameCause
|
|
103
|
+
: prior.code === error.code && prior.message === error.message);
|
|
104
|
+
if (prior && !sameFailure)
|
|
105
|
+
console.error(JSON.stringify(prior));
|
|
106
|
+
// A host catch may classify the same throw differently; keep its original diagnostic.
|
|
107
|
+
this.deferredResult.error = sameCause
|
|
108
|
+
? { ...error, ...prior }
|
|
109
|
+
: sameFailure
|
|
110
|
+
? { ...prior, ...error }
|
|
111
|
+
: error;
|
|
112
|
+
this.deferredResult.cause = cause;
|
|
113
|
+
delete this.deferredResult.completion;
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
55
116
|
if (typeof error.message === 'string')
|
|
56
117
|
this.lastError = error.message;
|
|
57
118
|
this.emit('error', { error });
|
|
58
119
|
}
|
|
59
120
|
complete(status, exitCode, fields = {}) {
|
|
121
|
+
if (this.deferredResult) {
|
|
122
|
+
this.deferredResult.completion ??= { status, exitCode, fields };
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
60
125
|
// A stage the platform left running ends with the command, on stderr too.
|
|
61
126
|
if (status === 'pass')
|
|
62
127
|
this.stages.close('done');
|
|
@@ -69,17 +134,18 @@ export class JsonStreamWriter {
|
|
|
69
134
|
}
|
|
70
135
|
}
|
|
71
136
|
/** Ends a stream on a thrown error: an `error` event, then `complete` (fail). */
|
|
72
|
-
export function failStream(stream, error, code) {
|
|
137
|
+
export function failStream(stream, error, code, defaultExitCode = 1) {
|
|
73
138
|
const exitCode = error !== null &&
|
|
74
139
|
typeof error === 'object' &&
|
|
75
140
|
'exitCode' in error &&
|
|
76
141
|
typeof error.exitCode === 'number'
|
|
77
142
|
? error.exitCode
|
|
78
|
-
:
|
|
143
|
+
: defaultExitCode;
|
|
79
144
|
stream.error({
|
|
80
145
|
code: exitCode === 2 ? 'USAGE' : code,
|
|
81
146
|
message: error instanceof Error ? error.message : String(error),
|
|
82
|
-
});
|
|
147
|
+
}, error);
|
|
83
148
|
stream.complete('fail', exitCode);
|
|
149
|
+
return exitCode;
|
|
84
150
|
}
|
|
85
151
|
//# sourceMappingURL=json-stream.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-stream.js","sourceRoot":"","sources":["../../src/harness/json-stream.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"json-stream.js","sourceRoot":"","sources":["../../src/harness/json-stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import type { RecipeSourceProvenance } from '@farmslot/protocol';
|
|
2
|
-
|
|
2
|
+
import { type SourceProvenanceSnapshot } from './execution-provenance.js';
|
|
3
|
+
export declare function gitLibraryProvenance(root: string, snapshot?: SourceProvenanceSnapshot): Promise<Pick<RecipeSourceProvenance, 'revision' | 'dirty'>>;
|
|
3
4
|
//# sourceMappingURL=library-provenance.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"library-provenance.d.ts","sourceRoot":"","sources":["../../src/harness/library-provenance.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"library-provenance.d.ts","sourceRoot":"","sources":["../../src/harness/library-provenance.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,EAAiB,KAAK,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAIzF,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,wBAAwB,GAClC,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,CA+B7D"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { execFile } from 'node:child_process';
|
|
2
2
|
import { promisify } from 'node:util';
|
|
3
|
+
import { sourceIsDirty } from './execution-provenance.js';
|
|
3
4
|
const execFileAsync = promisify(execFile);
|
|
4
|
-
export async function gitLibraryProvenance(root) {
|
|
5
|
+
export async function gitLibraryProvenance(root, snapshot) {
|
|
5
6
|
try {
|
|
6
7
|
const { stdout: tracked } = await execFileAsync('git', ['-C', root, 'ls-files', '--', '.'], {
|
|
7
8
|
encoding: 'utf8',
|
|
@@ -9,6 +10,9 @@ export async function gitLibraryProvenance(root) {
|
|
|
9
10
|
});
|
|
10
11
|
if (!tracked.trim())
|
|
11
12
|
return {};
|
|
13
|
+
if (snapshot) {
|
|
14
|
+
return snapshot.head ? { revision: snapshot.head, dirty: sourceIsDirty(snapshot) } : {};
|
|
15
|
+
}
|
|
12
16
|
const [{ stdout: revision }, { stdout: status }] = await Promise.all([
|
|
13
17
|
execFileAsync('git', ['-C', root, 'rev-parse', 'HEAD'], {
|
|
14
18
|
encoding: 'utf8',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"library-provenance.js","sourceRoot":"","sources":["../../src/harness/library-provenance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAItC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAAY;
|
|
1
|
+
{"version":3,"file":"library-provenance.js","sourceRoot":"","sources":["../../src/harness/library-provenance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAItC,OAAO,EAAE,aAAa,EAAiC,MAAM,2BAA2B,CAAC;AAEzF,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAAY,EACZ,QAAmC;IAEnC,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE;YAC1F,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YAAE,OAAO,EAAE,CAAC;QAC/B,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1F,CAAC;QACD,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACnE,aAAa,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE;gBACtD,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,KAAK;aACf,CAAC;YACF,aAAa,CACX,KAAK,EACL,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,IAAI,EAAE,GAAG,CAAC,EAC/E;gBACE,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,KAAK;aACf,CACF;SACF,CAAC,CAAC;QACH,MAAM,eAAe,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QACxC,OAAO,eAAe,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/F,CAAC;IAAC,MAAM,CAAC;QACP,wEAAwE;QACxE,kEAAkE;QAClE,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -28,7 +28,7 @@ export interface LiveAdapterRun {
|
|
|
28
28
|
action: string;
|
|
29
29
|
namespace: string;
|
|
30
30
|
node: Record<string, unknown>;
|
|
31
|
-
context: Pick<ActionExecutionContext, 'nodeId' | 'projectRoot' | 'artifactsDir' | 'env' | 'registerArtifact'>;
|
|
31
|
+
context: Pick<ActionExecutionContext, 'nodeId' | 'projectRoot' | 'artifactsDir' | 'env' | 'registerArtifact' | 'signal'>;
|
|
32
32
|
prepared?: PreparedLiveAdapter;
|
|
33
33
|
contextExtras?: Record<string, unknown>;
|
|
34
34
|
tsxCandidates?: readonly string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live-adapter-contract.d.ts","sourceRoot":"","sources":["../../src/harness/live-adapter-contract.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"live-adapter-contract.d.ts","sourceRoot":"","sources":["../../src/harness/live-adapter-contract.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAuCtE,sFAAsF;AACtF,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,UAAU,GAAE,MAAM,CAAC,UAAwB,YA0C5C;AAgED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,wBAAwB,CAAC,EAC7C,QAAQ,EACR,MAAM,EACN,SAAS,EACT,kBAAkB,EAClB,mBAA2B,GAC5B,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IAEf,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CA0DtC;AAkED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,aAAa,EAAE,SAAS,MAAM,EAAE,EAChC,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,GAAG,IAAI,CAUf;AAwBD,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,MAAM,CAAC,UAAU,0BAG/B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IAEf,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,EAAE,IAAI,CACX,sBAAsB,EACtB,QAAQ,GAAG,aAAa,GAAG,cAAc,GAAG,KAAK,GAAG,kBAAkB,GAAG,QAAQ,CAClF,CAAC;IACF,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAE/B,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAExC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,wBAAsB,oBAAoB,CAAC,EACzC,QAAQ,EACR,MAAM,EACN,SAAS,EACT,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,aAAa,EACb,aAAkB,GACnB,EAAE,cAAc,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAAC,CAuEtE;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAsBjF"}
|
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
// reads its input from the file in `<recipeEnvPrefix>_ADAPTER_INPUT` (also
|
|
4
4
|
// argv[2]) and writes JSON to the `outputPath` it names. A prepared script is
|
|
5
5
|
// bundled once so the approved bytes are the ones that run.
|
|
6
|
-
import { spawn } from 'node:child_process';
|
|
7
6
|
import { createHash } from 'node:crypto';
|
|
8
7
|
import { existsSync, readFileSync } from 'node:fs';
|
|
9
8
|
import { access, mkdtemp, readFile, realpath, rm, writeFile } from 'node:fs/promises';
|
|
10
9
|
import os from 'node:os';
|
|
11
10
|
import path from 'node:path';
|
|
12
11
|
import { pathToFileURL } from 'node:url';
|
|
12
|
+
import { runOwnedRecipeProcess } from '@farmslot/recipe-runner/adapters/core';
|
|
13
13
|
import { harnessAdapter, harnessAdapters } from './adapters.js';
|
|
14
14
|
import { trackCheckoutChild } from './checkout-lock.js';
|
|
15
15
|
import { recordCommandOutput } from './command-journal.js';
|
|
@@ -131,68 +131,6 @@ async function firstExecutablePath(paths) {
|
|
|
131
131
|
}
|
|
132
132
|
return null;
|
|
133
133
|
}
|
|
134
|
-
function runProcess(command, args, options) {
|
|
135
|
-
return new Promise((resolve, reject) => {
|
|
136
|
-
let settled = false;
|
|
137
|
-
const child = spawn(command, args, {
|
|
138
|
-
cwd: options.cwd,
|
|
139
|
-
env: options.env,
|
|
140
|
-
stdio: [options.stdin == null ? 'ignore' : 'pipe', 'pipe', 'pipe'],
|
|
141
|
-
});
|
|
142
|
-
if (child.pid)
|
|
143
|
-
trackCheckoutChild(options.cwd, child.pid);
|
|
144
|
-
if (options.stdin != null) {
|
|
145
|
-
child.stdin.on('error', (error) => {
|
|
146
|
-
if (error.code === 'EPIPE' || settled)
|
|
147
|
-
return;
|
|
148
|
-
settled = true;
|
|
149
|
-
reject(error);
|
|
150
|
-
});
|
|
151
|
-
child.stdin.end(options.stdin);
|
|
152
|
-
}
|
|
153
|
-
let stdout = '';
|
|
154
|
-
let stderr = '';
|
|
155
|
-
child.stdout.on('data', (chunk) => {
|
|
156
|
-
stdout += chunk;
|
|
157
|
-
recordCommandOutput(chunk);
|
|
158
|
-
});
|
|
159
|
-
child.stderr.on('data', (chunk) => {
|
|
160
|
-
stderr += chunk;
|
|
161
|
-
recordCommandOutput(chunk);
|
|
162
|
-
});
|
|
163
|
-
const timeout = options.timeoutMs
|
|
164
|
-
? setTimeout(() => {
|
|
165
|
-
if (settled)
|
|
166
|
-
return;
|
|
167
|
-
settled = true;
|
|
168
|
-
child.kill('SIGTERM');
|
|
169
|
-
// Always escalate after the grace period: child.killed only records
|
|
170
|
-
// that kill() was CALLED, not that the process exited, so gating
|
|
171
|
-
// SIGKILL on it never fires and a SIGTERM-ignoring child leaks. The
|
|
172
|
-
// close listener cancels the escalation when the child exits in time.
|
|
173
|
-
const killTimer = setTimeout(() => child.kill('SIGKILL'), 1000);
|
|
174
|
-
child.once('close', () => clearTimeout(killTimer));
|
|
175
|
-
resolve({ exitCode: null, stdout, stderr, timedOut: true });
|
|
176
|
-
}, options.timeoutMs)
|
|
177
|
-
: undefined;
|
|
178
|
-
child.on('error', (error) => {
|
|
179
|
-
if (settled)
|
|
180
|
-
return;
|
|
181
|
-
settled = true;
|
|
182
|
-
if (timeout)
|
|
183
|
-
clearTimeout(timeout);
|
|
184
|
-
reject(error);
|
|
185
|
-
});
|
|
186
|
-
child.on('close', (exitCode) => {
|
|
187
|
-
if (settled)
|
|
188
|
-
return;
|
|
189
|
-
settled = true;
|
|
190
|
-
if (timeout)
|
|
191
|
-
clearTimeout(timeout);
|
|
192
|
-
resolve({ exitCode, stdout, stderr, timedOut: false });
|
|
193
|
-
});
|
|
194
|
-
});
|
|
195
|
-
}
|
|
196
134
|
export async function prepareLiveAdapterScript({ platform, action, namespace, implementationRoot, allowRuntimeImports = false, }) {
|
|
197
135
|
const entryPath = await firstExecutablePath(candidatePaths(platform, action, namespace, {
|
|
198
136
|
[recipeEnvName('ACTION_SOURCE_MAP')]: JSON.stringify({ [action]: implementationRoot }),
|
|
@@ -351,40 +289,44 @@ export async function runLiveAdapterScript({ platform, action, namespace, node,
|
|
|
351
289
|
if (!script)
|
|
352
290
|
return null;
|
|
353
291
|
const tempDir = await mkdtemp(path.join(os.tmpdir(), `${harnessHost().name}-live-adapter-`));
|
|
354
|
-
const inputPath = path.join(tempDir, 'input.json');
|
|
355
|
-
const outputPath = path.join(tempDir, 'output.json');
|
|
356
|
-
const input = {
|
|
357
|
-
schemaVersion: 1,
|
|
358
|
-
platform,
|
|
359
|
-
action,
|
|
360
|
-
node,
|
|
361
|
-
context: {
|
|
362
|
-
nodeId: context.nodeId,
|
|
363
|
-
projectRoot: context.projectRoot,
|
|
364
|
-
artifactsDir: context.artifactsDir,
|
|
365
|
-
...contextExtras,
|
|
366
|
-
},
|
|
367
|
-
outputPath,
|
|
368
|
-
};
|
|
369
|
-
await writeFile(inputPath, `${JSON.stringify(input, null, 2)}\n`);
|
|
370
|
-
const command = prepared
|
|
371
|
-
? commandForPrepared(context.projectRoot, platform, tsxCandidates)
|
|
372
|
-
: commandFor(script, tsxCandidates, context.projectRoot, platform);
|
|
373
|
-
const platformEnv = (await tsxLiveScripts(platform)?.env(context.projectRoot, tempDir)) ?? {};
|
|
374
|
-
const processTimeoutMs = liveAdapterProcessTimeoutMs(node);
|
|
375
|
-
const result = await runProcess(command.command, [...command.args, inputPath], {
|
|
376
|
-
cwd: context.projectRoot,
|
|
377
|
-
env: {
|
|
378
|
-
...process.env,
|
|
379
|
-
...context.env,
|
|
380
|
-
...platformEnv,
|
|
381
|
-
[recipeEnvName('ADAPTER_INPUT')]: inputPath,
|
|
382
|
-
[recipeEnvName('ADAPTER_OUTPUT')]: outputPath,
|
|
383
|
-
},
|
|
384
|
-
timeoutMs: processTimeoutMs,
|
|
385
|
-
...(prepared ? { stdin: prepared.sourceText } : {}),
|
|
386
|
-
});
|
|
387
292
|
try {
|
|
293
|
+
const inputPath = path.join(tempDir, 'input.json');
|
|
294
|
+
const outputPath = path.join(tempDir, 'output.json');
|
|
295
|
+
const input = {
|
|
296
|
+
schemaVersion: 1,
|
|
297
|
+
platform,
|
|
298
|
+
action,
|
|
299
|
+
node,
|
|
300
|
+
context: {
|
|
301
|
+
nodeId: context.nodeId,
|
|
302
|
+
projectRoot: context.projectRoot,
|
|
303
|
+
artifactsDir: context.artifactsDir,
|
|
304
|
+
...contextExtras,
|
|
305
|
+
},
|
|
306
|
+
outputPath,
|
|
307
|
+
};
|
|
308
|
+
await writeFile(inputPath, `${JSON.stringify(input, null, 2)}\n`);
|
|
309
|
+
const command = prepared
|
|
310
|
+
? commandForPrepared(context.projectRoot, platform, tsxCandidates)
|
|
311
|
+
: commandFor(script, tsxCandidates, context.projectRoot, platform);
|
|
312
|
+
const platformEnv = (await tsxLiveScripts(platform)?.env(context.projectRoot, tempDir)) ?? {};
|
|
313
|
+
const processTimeoutMs = liveAdapterProcessTimeoutMs(node);
|
|
314
|
+
const result = await runOwnedRecipeProcess(command.command, [...command.args, inputPath], {
|
|
315
|
+
cwd: context.projectRoot,
|
|
316
|
+
env: {
|
|
317
|
+
...process.env,
|
|
318
|
+
...context.env,
|
|
319
|
+
...platformEnv,
|
|
320
|
+
[recipeEnvName('ADAPTER_INPUT')]: inputPath,
|
|
321
|
+
[recipeEnvName('ADAPTER_OUTPUT')]: outputPath,
|
|
322
|
+
},
|
|
323
|
+
timeoutMs: processTimeoutMs,
|
|
324
|
+
signal: context.signal,
|
|
325
|
+
ownProcessGroup: context.signal !== undefined,
|
|
326
|
+
onSpawn: (pid, ownsGroup) => trackCheckoutChild(context.projectRoot, pid, ownsGroup),
|
|
327
|
+
onOutput: (chunk) => recordCommandOutput(chunk),
|
|
328
|
+
...(prepared ? { input: prepared.sourceText } : {}),
|
|
329
|
+
});
|
|
388
330
|
if (result.timedOut) {
|
|
389
331
|
throw new Error(`Live adapter ${script} timed out after ${processTimeoutMs}ms.`);
|
|
390
332
|
}
|