@smthrs/harness 0.0.0-stage → 1.0.0-rc.3
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 +387 -0
- package/LICENSE +21 -0
- package/README.md +138 -2
- package/dist/cjs/AgentEvent.d.ts +3092 -0
- package/dist/cjs/AgentEvent.d.ts.map +1 -0
- package/dist/cjs/AgentEvent.js +1116 -0
- package/dist/cjs/AgentEvent.js.map +7 -0
- package/dist/cjs/CallLedger.d.ts +378 -0
- package/dist/cjs/CallLedger.d.ts.map +1 -0
- package/dist/cjs/CallLedger.js +240 -0
- package/dist/cjs/CallLedger.js.map +7 -0
- package/dist/cjs/Cell.d.ts +774 -0
- package/dist/cjs/Cell.d.ts.map +1 -0
- package/dist/cjs/Cell.js +431 -0
- package/dist/cjs/Cell.js.map +7 -0
- package/dist/cjs/CellCalls.d.ts +115 -0
- package/dist/cjs/CellCalls.d.ts.map +1 -0
- package/dist/cjs/CellCalls.js +98 -0
- package/dist/cjs/CellCalls.js.map +7 -0
- package/dist/cjs/CellHistory.d.ts +102 -0
- package/dist/cjs/CellHistory.d.ts.map +1 -0
- package/dist/cjs/CellHistory.js +54 -0
- package/dist/cjs/CellHistory.js.map +7 -0
- package/dist/cjs/CellTurn.d.ts +1071 -0
- package/dist/cjs/CellTurn.d.ts.map +1 -0
- package/dist/cjs/CellTurn.js +2618 -0
- package/dist/cjs/CellTurn.js.map +7 -0
- package/dist/cjs/CellValidation.d.ts +94 -0
- package/dist/cjs/CellValidation.d.ts.map +1 -0
- package/dist/cjs/CellValidation.js +218 -0
- package/dist/cjs/CellValidation.js.map +7 -0
- package/dist/cjs/Compaction.d.ts +158 -0
- package/dist/cjs/Compaction.d.ts.map +1 -0
- package/dist/cjs/Compaction.js +189 -0
- package/dist/cjs/Compaction.js.map +7 -0
- package/dist/cjs/CompletionClaim.d.ts +801 -0
- package/dist/cjs/CompletionClaim.d.ts.map +1 -0
- package/dist/cjs/CompletionClaim.js +303 -0
- package/dist/cjs/CompletionClaim.js.map +7 -0
- package/dist/cjs/ContextWindow.d.ts +435 -0
- package/dist/cjs/ContextWindow.d.ts.map +1 -0
- package/dist/cjs/ContextWindow.js +319 -0
- package/dist/cjs/ContextWindow.js.map +7 -0
- package/dist/cjs/EngineLike.d.ts +546 -0
- package/dist/cjs/EngineLike.d.ts.map +1 -0
- package/dist/cjs/EngineLike.js +114 -0
- package/dist/cjs/EngineLike.js.map +7 -0
- package/dist/cjs/ExternalTranscript.d.ts +349 -0
- package/dist/cjs/ExternalTranscript.d.ts.map +1 -0
- package/dist/cjs/ExternalTranscript.js +826 -0
- package/dist/cjs/ExternalTranscript.js.map +7 -0
- package/dist/cjs/FailedCall.d.ts +132 -0
- package/dist/cjs/FailedCall.d.ts.map +1 -0
- package/dist/cjs/FailedCall.js +53 -0
- package/dist/cjs/FailedCall.js.map +7 -0
- package/dist/cjs/FlowBinding.d.ts +289 -0
- package/dist/cjs/FlowBinding.d.ts.map +1 -0
- package/dist/cjs/FlowBinding.js +251 -0
- package/dist/cjs/FlowBinding.js.map +7 -0
- package/dist/cjs/HarnessError.d.ts +57 -0
- package/dist/cjs/HarnessError.d.ts.map +1 -0
- package/dist/cjs/HarnessError.js +75 -0
- package/dist/cjs/HarnessError.js.map +7 -0
- package/dist/cjs/Judgement.d.ts +289 -0
- package/dist/cjs/Judgement.d.ts.map +1 -0
- package/dist/cjs/Judgement.js +240 -0
- package/dist/cjs/Judgement.js.map +7 -0
- package/dist/cjs/Monitor.d.ts +374 -0
- package/dist/cjs/Monitor.d.ts.map +1 -0
- package/dist/cjs/Monitor.js +233 -0
- package/dist/cjs/Monitor.js.map +7 -0
- package/dist/cjs/NarrowedCheck.d.ts +523 -0
- package/dist/cjs/NarrowedCheck.d.ts.map +1 -0
- package/dist/cjs/NarrowedCheck.js +263 -0
- package/dist/cjs/NarrowedCheck.js.map +7 -0
- package/dist/cjs/Notifications.d.ts +42 -0
- package/dist/cjs/Notifications.d.ts.map +1 -0
- package/dist/cjs/Notifications.js +177 -0
- package/dist/cjs/Notifications.js.map +7 -0
- package/dist/cjs/Plan.d.ts +127 -0
- package/dist/cjs/Plan.d.ts.map +1 -0
- package/dist/cjs/Plan.js +77 -0
- package/dist/cjs/Plan.js.map +7 -0
- package/dist/cjs/QuickJSSandbox.d.ts +151 -0
- package/dist/cjs/QuickJSSandbox.d.ts.map +1 -0
- package/dist/cjs/QuickJSSandbox.js +987 -0
- package/dist/cjs/QuickJSSandbox.js.map +7 -0
- package/dist/cjs/Relevance.d.ts +213 -0
- package/dist/cjs/Relevance.d.ts.map +1 -0
- package/dist/cjs/Relevance.js +183 -0
- package/dist/cjs/Relevance.js.map +7 -0
- package/dist/cjs/Sandbox.d.ts +637 -0
- package/dist/cjs/Sandbox.d.ts.map +1 -0
- package/dist/cjs/Sandbox.js +260 -0
- package/dist/cjs/Sandbox.js.map +7 -0
- package/dist/cjs/Steering.d.ts +464 -0
- package/dist/cjs/Steering.d.ts.map +1 -0
- package/dist/cjs/Steering.js +153 -0
- package/dist/cjs/Steering.js.map +7 -0
- package/dist/cjs/StructuredOutput.d.ts +252 -0
- package/dist/cjs/StructuredOutput.d.ts.map +1 -0
- package/dist/cjs/StructuredOutput.js +266 -0
- package/dist/cjs/StructuredOutput.js.map +7 -0
- package/dist/cjs/Sufficiency.d.ts +195 -0
- package/dist/cjs/Sufficiency.d.ts.map +1 -0
- package/dist/cjs/Sufficiency.js +110 -0
- package/dist/cjs/Sufficiency.js.map +7 -0
- package/dist/cjs/Supervisor.d.ts +719 -0
- package/dist/cjs/Supervisor.d.ts.map +1 -0
- package/dist/cjs/Supervisor.js +313 -0
- package/dist/cjs/Supervisor.js.map +7 -0
- package/dist/cjs/Tokens.d.ts +86 -0
- package/dist/cjs/Tokens.d.ts.map +1 -0
- package/dist/cjs/Tokens.js +72 -0
- package/dist/cjs/Tokens.js.map +7 -0
- package/dist/cjs/Transcript.d.ts +171 -0
- package/dist/cjs/Transcript.d.ts.map +1 -0
- package/dist/cjs/Transcript.js +342 -0
- package/dist/cjs/Transcript.js.map +7 -0
- package/dist/cjs/TruncatedOutput.d.ts +186 -0
- package/dist/cjs/TruncatedOutput.d.ts.map +1 -0
- package/dist/cjs/TruncatedOutput.js +143 -0
- package/dist/cjs/TruncatedOutput.js.map +7 -0
- package/dist/cjs/UnmovedTree.d.ts +113 -0
- package/dist/cjs/UnmovedTree.d.ts.map +1 -0
- package/dist/cjs/UnmovedTree.js +38 -0
- package/dist/cjs/UnmovedTree.js.map +7 -0
- package/dist/cjs/UnresolvedFailure.d.ts +196 -0
- package/dist/cjs/UnresolvedFailure.d.ts.map +1 -0
- package/dist/cjs/UnresolvedFailure.js +77 -0
- package/dist/cjs/UnresolvedFailure.js.map +7 -0
- package/dist/cjs/VacuousVerification.d.ts +237 -0
- package/dist/cjs/VacuousVerification.d.ts.map +1 -0
- package/dist/cjs/VacuousVerification.js +91 -0
- package/dist/cjs/VacuousVerification.js.map +7 -0
- package/dist/cjs/VariablesPanel.d.ts +117 -0
- package/dist/cjs/VariablesPanel.d.ts.map +1 -0
- package/dist/cjs/VariablesPanel.js +108 -0
- package/dist/cjs/VariablesPanel.js.map +7 -0
- package/dist/cjs/index.d.ts +172 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +99 -0
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/internal/bytes.d.ts +36 -0
- package/dist/cjs/internal/bytes.d.ts.map +1 -0
- package/dist/cjs/internal/bytes.js +57 -0
- package/dist/cjs/internal/bytes.js.map +7 -0
- package/dist/cjs/internal/cellPrompt.d.ts +122 -0
- package/dist/cjs/internal/cellPrompt.d.ts.map +1 -0
- package/dist/cjs/internal/cellPrompt.js +146 -0
- package/dist/cjs/internal/cellPrompt.js.map +7 -0
- package/dist/cjs/internal/compactable.d.ts +44 -0
- package/dist/cjs/internal/compactable.d.ts.map +1 -0
- package/dist/cjs/internal/compactable.js +56 -0
- package/dist/cjs/internal/compactable.js.map +7 -0
- package/dist/cjs/internal/compactionMarks.d.ts +278 -0
- package/dist/cjs/internal/compactionMarks.d.ts.map +1 -0
- package/dist/cjs/internal/compactionMarks.js +212 -0
- package/dist/cjs/internal/compactionMarks.js.map +7 -0
- package/dist/cjs/internal/demandText.d.ts +95 -0
- package/dist/cjs/internal/demandText.d.ts.map +1 -0
- package/dist/cjs/internal/demandText.js +70 -0
- package/dist/cjs/internal/demandText.js.map +7 -0
- package/dist/cjs/internal/elide.d.ts +109 -0
- package/dist/cjs/internal/elide.d.ts.map +1 -0
- package/dist/cjs/internal/elide.js +59 -0
- package/dist/cjs/internal/elide.js.map +7 -0
- package/dist/cjs/internal/frame.d.ts +463 -0
- package/dist/cjs/internal/frame.d.ts.map +1 -0
- package/dist/cjs/internal/frame.js +514 -0
- package/dist/cjs/internal/frame.js.map +7 -0
- package/dist/cjs/internal/nonNegativeSafeInt.d.ts +20 -0
- package/dist/cjs/internal/nonNegativeSafeInt.d.ts.map +1 -0
- package/dist/cjs/internal/nonNegativeSafeInt.js +29 -0
- package/dist/cjs/internal/nonNegativeSafeInt.js.map +7 -0
- package/dist/cjs/internal/paidUsage.d.ts +52 -0
- package/dist/cjs/internal/paidUsage.d.ts.map +1 -0
- package/dist/cjs/internal/paidUsage.js +70 -0
- package/dist/cjs/internal/paidUsage.js.map +7 -0
- package/dist/cjs/internal/printChannel.d.ts +233 -0
- package/dist/cjs/internal/printChannel.d.ts.map +1 -0
- package/dist/cjs/internal/printChannel.js +165 -0
- package/dist/cjs/internal/printChannel.js.map +7 -0
- package/dist/cjs/internal/printsObservation.d.ts +26 -0
- package/dist/cjs/internal/printsObservation.d.ts.map +1 -0
- package/dist/cjs/internal/printsObservation.js +27 -0
- package/dist/cjs/internal/printsObservation.js.map +7 -0
- package/dist/cjs/internal/refusal.d.ts +40 -0
- package/dist/cjs/internal/refusal.d.ts.map +1 -0
- package/dist/cjs/internal/refusal.js +45 -0
- package/dist/cjs/internal/refusal.js.map +7 -0
- package/dist/cjs/internal/supervision.d.ts +174 -0
- package/dist/cjs/internal/supervision.d.ts.map +1 -0
- package/dist/cjs/internal/supervision.js +402 -0
- package/dist/cjs/internal/supervision.js.map +7 -0
- package/dist/cjs/internal/unfinishedWork.d.ts +99 -0
- package/dist/cjs/internal/unfinishedWork.d.ts.map +1 -0
- package/dist/cjs/internal/unfinishedWork.js +80 -0
- package/dist/cjs/internal/unfinishedWork.js.map +7 -0
- package/dist/cjs/internal/unobservedCall.d.ts +112 -0
- package/dist/cjs/internal/unobservedCall.d.ts.map +1 -0
- package/dist/cjs/internal/unobservedCall.js +345 -0
- package/dist/cjs/internal/unobservedCall.js.map +7 -0
- package/dist/cjs/internal/untrustedData.d.ts +14 -0
- package/dist/cjs/internal/untrustedData.d.ts.map +1 -0
- package/dist/cjs/internal/untrustedData.js +30 -0
- package/dist/cjs/internal/untrustedData.js.map +7 -0
- package/dist/cjs/package.json +1 -0
- package/dist/esm/AgentEvent.d.ts +3092 -0
- package/dist/esm/AgentEvent.d.ts.map +1 -0
- package/dist/esm/AgentEvent.js +1610 -0
- package/dist/esm/AgentEvent.js.map +1 -0
- package/dist/esm/CallLedger.d.ts +378 -0
- package/dist/esm/CallLedger.d.ts.map +1 -0
- package/dist/esm/CallLedger.js +506 -0
- package/dist/esm/CallLedger.js.map +1 -0
- package/dist/esm/Cell.d.ts +774 -0
- package/dist/esm/Cell.d.ts.map +1 -0
- package/dist/esm/Cell.js +772 -0
- package/dist/esm/Cell.js.map +1 -0
- package/dist/esm/CellCalls.d.ts +115 -0
- package/dist/esm/CellCalls.d.ts.map +1 -0
- package/dist/esm/CellCalls.js +97 -0
- package/dist/esm/CellCalls.js.map +1 -0
- package/dist/esm/CellHistory.d.ts +102 -0
- package/dist/esm/CellHistory.d.ts.map +1 -0
- package/dist/esm/CellHistory.js +91 -0
- package/dist/esm/CellHistory.js.map +1 -0
- package/dist/esm/CellTurn.d.ts +1071 -0
- package/dist/esm/CellTurn.d.ts.map +1 -0
- package/dist/esm/CellTurn.js +3410 -0
- package/dist/esm/CellTurn.js.map +1 -0
- package/dist/esm/CellValidation.d.ts +94 -0
- package/dist/esm/CellValidation.d.ts.map +1 -0
- package/dist/esm/CellValidation.js +335 -0
- package/dist/esm/CellValidation.js.map +1 -0
- package/dist/esm/Compaction.d.ts +158 -0
- package/dist/esm/Compaction.d.ts.map +1 -0
- package/dist/esm/Compaction.js +216 -0
- package/dist/esm/Compaction.js.map +1 -0
- package/dist/esm/CompletionClaim.d.ts +801 -0
- package/dist/esm/CompletionClaim.d.ts.map +1 -0
- package/dist/esm/CompletionClaim.js +833 -0
- package/dist/esm/CompletionClaim.js.map +1 -0
- package/dist/esm/ContextWindow.d.ts +435 -0
- package/dist/esm/ContextWindow.d.ts.map +1 -0
- package/dist/esm/ContextWindow.js +427 -0
- package/dist/esm/ContextWindow.js.map +1 -0
- package/dist/esm/EngineLike.d.ts +546 -0
- package/dist/esm/EngineLike.d.ts.map +1 -0
- package/dist/esm/EngineLike.js +218 -0
- package/dist/esm/EngineLike.js.map +1 -0
- package/dist/esm/ExternalTranscript.d.ts +349 -0
- package/dist/esm/ExternalTranscript.d.ts.map +1 -0
- package/dist/esm/ExternalTranscript.js +987 -0
- package/dist/esm/ExternalTranscript.js.map +1 -0
- package/dist/esm/FailedCall.d.ts +132 -0
- package/dist/esm/FailedCall.d.ts.map +1 -0
- package/dist/esm/FailedCall.js +131 -0
- package/dist/esm/FailedCall.js.map +1 -0
- package/dist/esm/FlowBinding.d.ts +289 -0
- package/dist/esm/FlowBinding.d.ts.map +1 -0
- package/dist/esm/FlowBinding.js +376 -0
- package/dist/esm/FlowBinding.js.map +1 -0
- package/dist/esm/HarnessError.d.ts +57 -0
- package/dist/esm/HarnessError.d.ts.map +1 -0
- package/dist/esm/HarnessError.js +85 -0
- package/dist/esm/HarnessError.js.map +1 -0
- package/dist/esm/Judgement.d.ts +289 -0
- package/dist/esm/Judgement.d.ts.map +1 -0
- package/dist/esm/Judgement.js +305 -0
- package/dist/esm/Judgement.js.map +1 -0
- package/dist/esm/Monitor.d.ts +374 -0
- package/dist/esm/Monitor.d.ts.map +1 -0
- package/dist/esm/Monitor.js +370 -0
- package/dist/esm/Monitor.js.map +1 -0
- package/dist/esm/NarrowedCheck.d.ts +523 -0
- package/dist/esm/NarrowedCheck.d.ts.map +1 -0
- package/dist/esm/NarrowedCheck.js +612 -0
- package/dist/esm/NarrowedCheck.js.map +1 -0
- package/dist/esm/Notifications.d.ts +42 -0
- package/dist/esm/Notifications.d.ts.map +1 -0
- package/dist/esm/Notifications.js +215 -0
- package/dist/esm/Notifications.js.map +1 -0
- package/dist/esm/Plan.d.ts +127 -0
- package/dist/esm/Plan.d.ts.map +1 -0
- package/dist/esm/Plan.js +97 -0
- package/dist/esm/Plan.js.map +1 -0
- package/dist/esm/QuickJSSandbox.d.ts +151 -0
- package/dist/esm/QuickJSSandbox.d.ts.map +1 -0
- package/dist/esm/QuickJSSandbox.js +1364 -0
- package/dist/esm/QuickJSSandbox.js.map +1 -0
- package/dist/esm/Relevance.d.ts +213 -0
- package/dist/esm/Relevance.d.ts.map +1 -0
- package/dist/esm/Relevance.js +254 -0
- package/dist/esm/Relevance.js.map +1 -0
- package/dist/esm/Sandbox.d.ts +637 -0
- package/dist/esm/Sandbox.d.ts.map +1 -0
- package/dist/esm/Sandbox.js +464 -0
- package/dist/esm/Sandbox.js.map +1 -0
- package/dist/esm/Steering.d.ts +464 -0
- package/dist/esm/Steering.d.ts.map +1 -0
- package/dist/esm/Steering.js +193 -0
- package/dist/esm/Steering.js.map +1 -0
- package/dist/esm/StructuredOutput.d.ts +252 -0
- package/dist/esm/StructuredOutput.d.ts.map +1 -0
- package/dist/esm/StructuredOutput.js +430 -0
- package/dist/esm/StructuredOutput.js.map +1 -0
- package/dist/esm/Sufficiency.d.ts +195 -0
- package/dist/esm/Sufficiency.d.ts.map +1 -0
- package/dist/esm/Sufficiency.js +207 -0
- package/dist/esm/Sufficiency.js.map +1 -0
- package/dist/esm/Supervisor.d.ts +719 -0
- package/dist/esm/Supervisor.d.ts.map +1 -0
- package/dist/esm/Supervisor.js +575 -0
- package/dist/esm/Supervisor.js.map +1 -0
- package/dist/esm/Tokens.d.ts +86 -0
- package/dist/esm/Tokens.d.ts.map +1 -0
- package/dist/esm/Tokens.js +92 -0
- package/dist/esm/Tokens.js.map +1 -0
- package/dist/esm/Transcript.d.ts +171 -0
- package/dist/esm/Transcript.d.ts.map +1 -0
- package/dist/esm/Transcript.js +424 -0
- package/dist/esm/Transcript.js.map +1 -0
- package/dist/esm/TruncatedOutput.d.ts +186 -0
- package/dist/esm/TruncatedOutput.d.ts.map +1 -0
- package/dist/esm/TruncatedOutput.js +257 -0
- package/dist/esm/TruncatedOutput.js.map +1 -0
- package/dist/esm/UnmovedTree.d.ts +113 -0
- package/dist/esm/UnmovedTree.d.ts.map +1 -0
- package/dist/esm/UnmovedTree.js +90 -0
- package/dist/esm/UnmovedTree.js.map +1 -0
- package/dist/esm/UnresolvedFailure.d.ts +196 -0
- package/dist/esm/UnresolvedFailure.d.ts.map +1 -0
- package/dist/esm/UnresolvedFailure.js +218 -0
- package/dist/esm/UnresolvedFailure.js.map +1 -0
- package/dist/esm/VacuousVerification.d.ts +237 -0
- package/dist/esm/VacuousVerification.d.ts.map +1 -0
- package/dist/esm/VacuousVerification.js +245 -0
- package/dist/esm/VacuousVerification.js.map +1 -0
- package/dist/esm/VariablesPanel.d.ts +117 -0
- package/dist/esm/VariablesPanel.d.ts.map +1 -0
- package/dist/esm/VariablesPanel.js +142 -0
- package/dist/esm/VariablesPanel.js.map +1 -0
- package/dist/esm/index.d.ts +172 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +172 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/internal/bytes.d.ts +36 -0
- package/dist/esm/internal/bytes.d.ts.map +1 -0
- package/dist/esm/internal/bytes.js +70 -0
- package/dist/esm/internal/bytes.js.map +1 -0
- package/dist/esm/internal/cellPrompt.d.ts +122 -0
- package/dist/esm/internal/cellPrompt.d.ts.map +1 -0
- package/dist/esm/internal/cellPrompt.js +276 -0
- package/dist/esm/internal/cellPrompt.js.map +1 -0
- package/dist/esm/internal/compactable.d.ts +44 -0
- package/dist/esm/internal/compactable.d.ts.map +1 -0
- package/dist/esm/internal/compactable.js +71 -0
- package/dist/esm/internal/compactable.js.map +1 -0
- package/dist/esm/internal/compactionMarks.d.ts +278 -0
- package/dist/esm/internal/compactionMarks.d.ts.map +1 -0
- package/dist/esm/internal/compactionMarks.js +317 -0
- package/dist/esm/internal/compactionMarks.js.map +1 -0
- package/dist/esm/internal/demandText.d.ts +95 -0
- package/dist/esm/internal/demandText.d.ts.map +1 -0
- package/dist/esm/internal/demandText.js +128 -0
- package/dist/esm/internal/demandText.js.map +1 -0
- package/dist/esm/internal/elide.d.ts +109 -0
- package/dist/esm/internal/elide.d.ts.map +1 -0
- package/dist/esm/internal/elide.js +123 -0
- package/dist/esm/internal/elide.js.map +1 -0
- package/dist/esm/internal/frame.d.ts +463 -0
- package/dist/esm/internal/frame.d.ts.map +1 -0
- package/dist/esm/internal/frame.js +861 -0
- package/dist/esm/internal/frame.js.map +1 -0
- package/dist/esm/internal/nonNegativeSafeInt.d.ts +20 -0
- package/dist/esm/internal/nonNegativeSafeInt.d.ts.map +1 -0
- package/dist/esm/internal/nonNegativeSafeInt.js +20 -0
- package/dist/esm/internal/nonNegativeSafeInt.js.map +1 -0
- package/dist/esm/internal/paidUsage.d.ts +52 -0
- package/dist/esm/internal/paidUsage.d.ts.map +1 -0
- package/dist/esm/internal/paidUsage.js +72 -0
- package/dist/esm/internal/paidUsage.js.map +1 -0
- package/dist/esm/internal/printChannel.d.ts +233 -0
- package/dist/esm/internal/printChannel.d.ts.map +1 -0
- package/dist/esm/internal/printChannel.js +376 -0
- package/dist/esm/internal/printChannel.js.map +1 -0
- package/dist/esm/internal/printsObservation.d.ts +26 -0
- package/dist/esm/internal/printsObservation.d.ts.map +1 -0
- package/dist/esm/internal/printsObservation.js +29 -0
- package/dist/esm/internal/printsObservation.js.map +1 -0
- package/dist/esm/internal/refusal.d.ts +40 -0
- package/dist/esm/internal/refusal.d.ts.map +1 -0
- package/dist/esm/internal/refusal.js +47 -0
- package/dist/esm/internal/refusal.js.map +1 -0
- package/dist/esm/internal/supervision.d.ts +174 -0
- package/dist/esm/internal/supervision.d.ts.map +1 -0
- package/dist/esm/internal/supervision.js +485 -0
- package/dist/esm/internal/supervision.js.map +1 -0
- package/dist/esm/internal/unfinishedWork.d.ts +99 -0
- package/dist/esm/internal/unfinishedWork.d.ts.map +1 -0
- package/dist/esm/internal/unfinishedWork.js +85 -0
- package/dist/esm/internal/unfinishedWork.js.map +1 -0
- package/dist/esm/internal/unobservedCall.d.ts +112 -0
- package/dist/esm/internal/unobservedCall.d.ts.map +1 -0
- package/dist/esm/internal/unobservedCall.js +501 -0
- package/dist/esm/internal/unobservedCall.js.map +1 -0
- package/dist/esm/internal/untrustedData.d.ts +14 -0
- package/dist/esm/internal/untrustedData.d.ts.map +1 -0
- package/dist/esm/internal/untrustedData.js +15 -0
- package/dist/esm/internal/untrustedData.js.map +1 -0
- package/docs/README.md +129 -0
- package/docs/api.md +1869 -0
- package/docs/concepts.md +238 -0
- package/docs/external-transcripts.md +245 -0
- package/docs/guides/bind-flows.md +167 -0
- package/docs/guides/drive-the-loop.md +265 -0
- package/docs/guides/run-cells.md +262 -0
- package/docs/guides/workerd.md +144 -0
- package/docs/installation.md +69 -0
- package/docs/quickstart.md +121 -0
- package/docs/reference.md +954 -0
- package/docs/troubleshooting.md +177 -0
- package/package.json +463 -3
- package/src/AgentEvent.ts +1772 -0
- package/src/CallLedger.ts +560 -0
- package/src/Cell.ts +926 -0
- package/src/CellCalls.ts +198 -0
- package/src/CellHistory.ts +128 -0
- package/src/CellTurn.ts +4450 -0
- package/src/CellValidation.ts +382 -0
- package/src/Compaction.ts +330 -0
- package/src/CompletionClaim.ts +1013 -0
- package/src/ContextWindow.ts +669 -0
- package/src/EngineLike.ts +614 -0
- package/src/ExternalTranscript.ts +1143 -0
- package/src/FailedCall.ts +163 -0
- package/src/FlowBinding.ts +603 -0
- package/src/HarnessError.ts +98 -0
- package/src/Judgement.ts +526 -0
- package/src/Monitor.ts +579 -0
- package/src/NarrowedCheck.ts +694 -0
- package/src/Notifications.ts +262 -0
- package/src/Plan.ts +113 -0
- package/src/QuickJSSandbox.ts +1557 -0
- package/src/Relevance.ts +352 -0
- package/src/Sandbox.ts +908 -0
- package/src/Steering.ts +405 -0
- package/src/StructuredOutput.ts +484 -0
- package/src/Sufficiency.ts +247 -0
- package/src/Supervisor.ts +798 -0
- package/src/Tokens.ts +108 -0
- package/src/Transcript.ts +513 -0
- package/src/TruncatedOutput.ts +297 -0
- package/src/UnmovedTree.ts +121 -0
- package/src/UnresolvedFailure.ts +240 -0
- package/src/VacuousVerification.ts +280 -0
- package/src/VariablesPanel.ts +165 -0
- package/src/index.ts +204 -0
- package/src/internal/bytes.ts +70 -0
- package/src/internal/cellPrompt.ts +337 -0
- package/src/internal/compactable.ts +76 -0
- package/src/internal/compactionMarks.ts +454 -0
- package/src/internal/demandText.ts +145 -0
- package/src/internal/elide.ts +130 -0
- package/src/internal/frame.ts +1178 -0
- package/src/internal/nonNegativeSafeInt.ts +24 -0
- package/src/internal/paidUsage.ts +90 -0
- package/src/internal/printChannel.ts +434 -0
- package/src/internal/printsObservation.ts +31 -0
- package/src/internal/refusal.ts +53 -0
- package/src/internal/supervision.ts +652 -0
- package/src/internal/unfinishedWork.ts +123 -0
- package/src/internal/unobservedCall.ts +536 -0
- package/src/internal/untrustedData.ts +19 -0
|
@@ -0,0 +1,464 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turn-boundary steering values and their source contract.
|
|
3
|
+
*
|
|
4
|
+
* Governing design: `../docs/concepts.md#notification-queue`.
|
|
5
|
+
*
|
|
6
|
+
* @since 0.1.0
|
|
7
|
+
*/
|
|
8
|
+
import * as ModelRequest from "@smthrs/model/ModelRequest";
|
|
9
|
+
import { Context, Effect, Layer, Schema } from "effect";
|
|
10
|
+
import type { HarnessError } from "./HarnessError.ts";
|
|
11
|
+
/**
|
|
12
|
+
* The boundary at which a transcript insertion may be promoted.
|
|
13
|
+
*
|
|
14
|
+
* @category models
|
|
15
|
+
* @since 0.1.0
|
|
16
|
+
* @slop
|
|
17
|
+
*/
|
|
18
|
+
export type Delivery = "steer" | "queue";
|
|
19
|
+
/**
|
|
20
|
+
* A transcript insertion promoted at the next turn boundary.
|
|
21
|
+
*
|
|
22
|
+
* @category models
|
|
23
|
+
* @since 0.1.0
|
|
24
|
+
* @slop
|
|
25
|
+
*/
|
|
26
|
+
export interface SteerInsert {
|
|
27
|
+
readonly _tag: "Insert";
|
|
28
|
+
readonly delivery: "steer";
|
|
29
|
+
readonly admittedAt: number;
|
|
30
|
+
readonly message: ModelRequest.Message;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* A transcript insertion promoted only when the run would otherwise go idle.
|
|
34
|
+
*
|
|
35
|
+
* @category models
|
|
36
|
+
* @since 0.1.0
|
|
37
|
+
* @slop
|
|
38
|
+
*/
|
|
39
|
+
export interface QueueInsert {
|
|
40
|
+
readonly _tag: "Insert";
|
|
41
|
+
readonly delivery: "queue";
|
|
42
|
+
readonly admittedAt: number;
|
|
43
|
+
readonly message: ModelRequest.Message;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* A transcript insertion admitted for a future turn.
|
|
47
|
+
*
|
|
48
|
+
* @category models
|
|
49
|
+
* @since 0.1.0
|
|
50
|
+
* @slop
|
|
51
|
+
*/
|
|
52
|
+
export type Insert = SteerInsert | QueueInsert;
|
|
53
|
+
/**
|
|
54
|
+
* A model-seat change that applies only after the current turn closes.
|
|
55
|
+
*
|
|
56
|
+
* @category models
|
|
57
|
+
* @since 0.1.0
|
|
58
|
+
* @slop
|
|
59
|
+
*/
|
|
60
|
+
export interface SeatChange {
|
|
61
|
+
readonly _tag: "SeatChange";
|
|
62
|
+
readonly delivery: "steer";
|
|
63
|
+
readonly admittedAt: number;
|
|
64
|
+
readonly seat: string;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* A thinking-level change that applies only after the current turn closes.
|
|
68
|
+
*
|
|
69
|
+
* @category models
|
|
70
|
+
* @since 0.1.0
|
|
71
|
+
* @slop
|
|
72
|
+
*/
|
|
73
|
+
export interface ThinkingChange {
|
|
74
|
+
readonly _tag: "ThinkingChange";
|
|
75
|
+
readonly delivery: "steer";
|
|
76
|
+
readonly admittedAt: number;
|
|
77
|
+
readonly thinking: ModelRequest.ReasoningEffort;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* A serializable steering event.
|
|
81
|
+
*
|
|
82
|
+
* @category models
|
|
83
|
+
* @since 0.1.0
|
|
84
|
+
* @slop
|
|
85
|
+
*/
|
|
86
|
+
export type Item = Insert | SeatChange | ThinkingChange;
|
|
87
|
+
/**
|
|
88
|
+
* An immutable, FIFO queue of steering events.
|
|
89
|
+
*
|
|
90
|
+
* @category models
|
|
91
|
+
* @since 0.1.0
|
|
92
|
+
* @slop
|
|
93
|
+
*/
|
|
94
|
+
export interface Queue {
|
|
95
|
+
readonly items: ReadonlyArray<Item>;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* The values promoted when a turn reaches its close boundary.
|
|
99
|
+
*
|
|
100
|
+
* @category models
|
|
101
|
+
* @since 0.1.0
|
|
102
|
+
* @slop
|
|
103
|
+
*/
|
|
104
|
+
export interface Drain {
|
|
105
|
+
readonly inserts: ReadonlyArray<ModelRequest.Message>;
|
|
106
|
+
readonly seatChanges: ReadonlyArray<SeatChange | ThinkingChange>;
|
|
107
|
+
readonly remaining: Queue;
|
|
108
|
+
readonly queued: boolean;
|
|
109
|
+
/**
|
|
110
|
+
* Whether this boundary had already drained, so the answer is the one it gave
|
|
111
|
+
* the first time.
|
|
112
|
+
*
|
|
113
|
+
* This is what makes a parked run answerable. A park resumes by re-executing
|
|
114
|
+
* its own frames, so it reaches the same boundary again and must be told the
|
|
115
|
+
* same thing — and it must also be able to find out that a NEWER boundary is
|
|
116
|
+
* the one an operator's answer is waiting at. A run walks its park's
|
|
117
|
+
* boundaries until one reports `false`, which is the first one this run has
|
|
118
|
+
* not consulted before.
|
|
119
|
+
*
|
|
120
|
+
* Host queue bookkeeping, like {@link Drain.remaining}, and deliberately not
|
|
121
|
+
* part of {@link DrainRecord}: it says which attempt asked, not what the
|
|
122
|
+
* boundary holds, and freezing it in a journaled value would tell every later
|
|
123
|
+
* attempt it was the first.
|
|
124
|
+
*/
|
|
125
|
+
readonly duplicate: boolean;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* The boundary a drain is being attempted at, and whether the run would go
|
|
129
|
+
* idle if nothing were delivered. Followups are held back until it would.
|
|
130
|
+
*
|
|
131
|
+
* @category models
|
|
132
|
+
* @since 0.1.0
|
|
133
|
+
* @slop
|
|
134
|
+
*/
|
|
135
|
+
export interface BoundaryInput {
|
|
136
|
+
readonly boundary: string;
|
|
137
|
+
readonly wouldIdle: boolean;
|
|
138
|
+
/**
|
|
139
|
+
* Set only at an honored park's boundary: why the run parked and what it
|
|
140
|
+
* asked. A source that can reach a person may show them the question and
|
|
141
|
+
* answer the drain with their reply; one that cannot ignores it.
|
|
142
|
+
*/
|
|
143
|
+
readonly park?: {
|
|
144
|
+
readonly reason: "waiting-input" | "waiting-event" | "waiting-quota";
|
|
145
|
+
readonly message: string;
|
|
146
|
+
} | undefined;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* The journaled record of one turn-boundary drain.
|
|
150
|
+
*
|
|
151
|
+
* A drain consumes host queue state, so it is a nondeterministic read: the
|
|
152
|
+
* controller journals exactly this projection through `EngineLike.record`,
|
|
153
|
+
* keyed on the frame and boundary, and a re-executed frame replays the record
|
|
154
|
+
* instead of draining an already-drained queue. Everything the controller
|
|
155
|
+
* folds into durable state is here; `remaining` is host queue bookkeeping and
|
|
156
|
+
* deliberately is not.
|
|
157
|
+
*
|
|
158
|
+
* @category schemas
|
|
159
|
+
* @since 0.1.0
|
|
160
|
+
* @slop
|
|
161
|
+
*/
|
|
162
|
+
export declare const DrainRecord: Schema.Struct<{
|
|
163
|
+
readonly inserts: Schema.$Array<Schema.Union<readonly [typeof ModelRequest.UserMessage, typeof ModelRequest.AssistantMessage, typeof ModelRequest.ToolMessage]> & {
|
|
164
|
+
readonly discriminants: readonly ["user", "assistant", "tool"];
|
|
165
|
+
readonly cases: {
|
|
166
|
+
user: typeof ModelRequest.UserMessage;
|
|
167
|
+
assistant: typeof ModelRequest.AssistantMessage;
|
|
168
|
+
tool: typeof ModelRequest.ToolMessage;
|
|
169
|
+
};
|
|
170
|
+
readonly isAnyOf: <const Keys>(keys: readonly Keys[]) => (value: ModelRequest.UserMessage | ModelRequest.AssistantMessage | ModelRequest.ToolMessage) => value is Extract<ModelRequest.UserMessage, {
|
|
171
|
+
readonly role: Keys;
|
|
172
|
+
}> | Extract<ModelRequest.AssistantMessage, {
|
|
173
|
+
readonly role: Keys;
|
|
174
|
+
}> | Extract<ModelRequest.ToolMessage, {
|
|
175
|
+
readonly role: Keys;
|
|
176
|
+
}>;
|
|
177
|
+
readonly guards: {
|
|
178
|
+
user: (u: unknown) => u is ModelRequest.UserMessage;
|
|
179
|
+
assistant: (u: unknown) => u is ModelRequest.AssistantMessage;
|
|
180
|
+
tool: (u: unknown) => u is ModelRequest.ToolMessage;
|
|
181
|
+
};
|
|
182
|
+
readonly match: {
|
|
183
|
+
<Cases extends {
|
|
184
|
+
user: (value: ModelRequest.UserMessage) => any;
|
|
185
|
+
assistant: (value: ModelRequest.AssistantMessage) => any;
|
|
186
|
+
tool: (value: ModelRequest.ToolMessage) => any;
|
|
187
|
+
}>(value: ModelRequest.UserMessage | ModelRequest.AssistantMessage | ModelRequest.ToolMessage, cases: Cases): Cases[keyof Cases] extends (value: any) => infer R ? import("effect/Unify").Unify<R> : never;
|
|
188
|
+
<Cases extends {
|
|
189
|
+
user: (value: ModelRequest.UserMessage) => any;
|
|
190
|
+
assistant: (value: ModelRequest.AssistantMessage) => any;
|
|
191
|
+
tool: (value: ModelRequest.ToolMessage) => any;
|
|
192
|
+
}>(cases: Cases): (value: ModelRequest.UserMessage | ModelRequest.AssistantMessage | ModelRequest.ToolMessage) => Cases[keyof Cases] extends (value: any) => infer R ? import("effect/Unify").Unify<R> : never;
|
|
193
|
+
};
|
|
194
|
+
readonly matchOrElse: {
|
|
195
|
+
<Cases extends {
|
|
196
|
+
user?: (value: ModelRequest.UserMessage) => any;
|
|
197
|
+
assistant?: (value: ModelRequest.AssistantMessage) => any;
|
|
198
|
+
tool?: (value: ModelRequest.ToolMessage) => any;
|
|
199
|
+
} & { [K in Exclude<keyof Cases, "user" | "assistant" | "tool">]: never; }, OrElse extends (value: Exclude<ModelRequest.UserMessage, {
|
|
200
|
+
readonly role: keyof Cases;
|
|
201
|
+
}> | Exclude<ModelRequest.AssistantMessage, {
|
|
202
|
+
readonly role: keyof Cases;
|
|
203
|
+
}> | Exclude<ModelRequest.ToolMessage, {
|
|
204
|
+
readonly role: keyof Cases;
|
|
205
|
+
}>) => any>(value: ModelRequest.UserMessage | ModelRequest.AssistantMessage | ModelRequest.ToolMessage, cases: Cases, orElse: OrElse): import("effect/Unify").Unify<{ [K_1 in keyof Cases]-?: NonNullable<Cases[K_1]> extends (...args: Array<any>) => infer R ? R : never; }[keyof Cases] | ReturnType<OrElse>>;
|
|
206
|
+
<Cases extends {
|
|
207
|
+
user?: (value: ModelRequest.UserMessage) => any;
|
|
208
|
+
assistant?: (value: ModelRequest.AssistantMessage) => any;
|
|
209
|
+
tool?: (value: ModelRequest.ToolMessage) => any;
|
|
210
|
+
} & { [K in Exclude<keyof Cases, "user" | "assistant" | "tool">]: never; }, OrElse extends (value: Exclude<ModelRequest.UserMessage, {
|
|
211
|
+
readonly role: keyof Cases;
|
|
212
|
+
}> | Exclude<ModelRequest.AssistantMessage, {
|
|
213
|
+
readonly role: keyof Cases;
|
|
214
|
+
}> | Exclude<ModelRequest.ToolMessage, {
|
|
215
|
+
readonly role: keyof Cases;
|
|
216
|
+
}>) => any>(cases: Cases, orElse: OrElse): (value: ModelRequest.UserMessage | ModelRequest.AssistantMessage | ModelRequest.ToolMessage) => import("effect/Unify").Unify<{ [K_1 in keyof Cases]-?: NonNullable<Cases[K_1]> extends (...args: Array<any>) => infer R ? R : never; }[keyof Cases] | ReturnType<OrElse>>;
|
|
217
|
+
};
|
|
218
|
+
} & {
|
|
219
|
+
make: (message: ModelRequest.Message) => ModelRequest.Message;
|
|
220
|
+
user: (content: string | ModelRequest.TextPart | ReadonlyArray<ModelRequest.TextPart>) => ModelRequest.UserMessage;
|
|
221
|
+
assistant: (content: string | ModelRequest.AssistantContentPart | ReadonlyArray<ModelRequest.AssistantContentPart>, options?: {
|
|
222
|
+
readonly stopReason?: ModelRequest.StopReason | undefined;
|
|
223
|
+
readonly responseId?: string | undefined;
|
|
224
|
+
readonly itemIds?: ReadonlyArray<string> | undefined;
|
|
225
|
+
}) => ModelRequest.AssistantMessage;
|
|
226
|
+
tool: (content: ModelRequest.ToolResultPart | ReadonlyArray<ModelRequest.ToolResultPart>) => ModelRequest.ToolMessage;
|
|
227
|
+
}>;
|
|
228
|
+
readonly seatChanges: Schema.$Array<Schema.Union<readonly [Schema.Struct<{
|
|
229
|
+
readonly _tag: Schema.Literal<"SeatChange">;
|
|
230
|
+
readonly delivery: Schema.Literal<"steer">;
|
|
231
|
+
readonly admittedAt: Schema.Number;
|
|
232
|
+
readonly seat: Schema.String;
|
|
233
|
+
}>, Schema.Struct<{
|
|
234
|
+
readonly _tag: Schema.Literal<"ThinkingChange">;
|
|
235
|
+
readonly delivery: Schema.Literal<"steer">;
|
|
236
|
+
readonly admittedAt: Schema.Number;
|
|
237
|
+
readonly thinking: Schema.Literals<readonly ["none", "minimal", "low", "medium", "high", "xhigh", "max"]>;
|
|
238
|
+
}>]>>;
|
|
239
|
+
readonly queued: Schema.Boolean;
|
|
240
|
+
/**
|
|
241
|
+
* Messages the run's supervisor delivers at this boundary, kept apart from
|
|
242
|
+
* `inserts` because they are not the person's words: the model reads them,
|
|
243
|
+
* and the completion brake's task never does. Absent from records written
|
|
244
|
+
* before the supervisor had a field of its own, and from boundaries it
|
|
245
|
+
* delivered nothing at.
|
|
246
|
+
*/
|
|
247
|
+
readonly supervisor: Schema.optional<Schema.$Array<Schema.Union<readonly [typeof ModelRequest.UserMessage, typeof ModelRequest.AssistantMessage, typeof ModelRequest.ToolMessage]> & {
|
|
248
|
+
readonly discriminants: readonly ["user", "assistant", "tool"];
|
|
249
|
+
readonly cases: {
|
|
250
|
+
user: typeof ModelRequest.UserMessage;
|
|
251
|
+
assistant: typeof ModelRequest.AssistantMessage;
|
|
252
|
+
tool: typeof ModelRequest.ToolMessage;
|
|
253
|
+
};
|
|
254
|
+
readonly isAnyOf: <const Keys>(keys: readonly Keys[]) => (value: ModelRequest.UserMessage | ModelRequest.AssistantMessage | ModelRequest.ToolMessage) => value is Extract<ModelRequest.UserMessage, {
|
|
255
|
+
readonly role: Keys;
|
|
256
|
+
}> | Extract<ModelRequest.AssistantMessage, {
|
|
257
|
+
readonly role: Keys;
|
|
258
|
+
}> | Extract<ModelRequest.ToolMessage, {
|
|
259
|
+
readonly role: Keys;
|
|
260
|
+
}>;
|
|
261
|
+
readonly guards: {
|
|
262
|
+
user: (u: unknown) => u is ModelRequest.UserMessage;
|
|
263
|
+
assistant: (u: unknown) => u is ModelRequest.AssistantMessage;
|
|
264
|
+
tool: (u: unknown) => u is ModelRequest.ToolMessage;
|
|
265
|
+
};
|
|
266
|
+
readonly match: {
|
|
267
|
+
<Cases extends {
|
|
268
|
+
user: (value: ModelRequest.UserMessage) => any;
|
|
269
|
+
assistant: (value: ModelRequest.AssistantMessage) => any;
|
|
270
|
+
tool: (value: ModelRequest.ToolMessage) => any;
|
|
271
|
+
}>(value: ModelRequest.UserMessage | ModelRequest.AssistantMessage | ModelRequest.ToolMessage, cases: Cases): Cases[keyof Cases] extends (value: any) => infer R ? import("effect/Unify").Unify<R> : never;
|
|
272
|
+
<Cases extends {
|
|
273
|
+
user: (value: ModelRequest.UserMessage) => any;
|
|
274
|
+
assistant: (value: ModelRequest.AssistantMessage) => any;
|
|
275
|
+
tool: (value: ModelRequest.ToolMessage) => any;
|
|
276
|
+
}>(cases: Cases): (value: ModelRequest.UserMessage | ModelRequest.AssistantMessage | ModelRequest.ToolMessage) => Cases[keyof Cases] extends (value: any) => infer R ? import("effect/Unify").Unify<R> : never;
|
|
277
|
+
};
|
|
278
|
+
readonly matchOrElse: {
|
|
279
|
+
<Cases extends {
|
|
280
|
+
user?: (value: ModelRequest.UserMessage) => any;
|
|
281
|
+
assistant?: (value: ModelRequest.AssistantMessage) => any;
|
|
282
|
+
tool?: (value: ModelRequest.ToolMessage) => any;
|
|
283
|
+
} & { [K in Exclude<keyof Cases, "user" | "assistant" | "tool">]: never; }, OrElse extends (value: Exclude<ModelRequest.UserMessage, {
|
|
284
|
+
readonly role: keyof Cases;
|
|
285
|
+
}> | Exclude<ModelRequest.AssistantMessage, {
|
|
286
|
+
readonly role: keyof Cases;
|
|
287
|
+
}> | Exclude<ModelRequest.ToolMessage, {
|
|
288
|
+
readonly role: keyof Cases;
|
|
289
|
+
}>) => any>(value: ModelRequest.UserMessage | ModelRequest.AssistantMessage | ModelRequest.ToolMessage, cases: Cases, orElse: OrElse): import("effect/Unify").Unify<{ [K_1 in keyof Cases]-?: NonNullable<Cases[K_1]> extends (...args: Array<any>) => infer R ? R : never; }[keyof Cases] | ReturnType<OrElse>>;
|
|
290
|
+
<Cases extends {
|
|
291
|
+
user?: (value: ModelRequest.UserMessage) => any;
|
|
292
|
+
assistant?: (value: ModelRequest.AssistantMessage) => any;
|
|
293
|
+
tool?: (value: ModelRequest.ToolMessage) => any;
|
|
294
|
+
} & { [K in Exclude<keyof Cases, "user" | "assistant" | "tool">]: never; }, OrElse extends (value: Exclude<ModelRequest.UserMessage, {
|
|
295
|
+
readonly role: keyof Cases;
|
|
296
|
+
}> | Exclude<ModelRequest.AssistantMessage, {
|
|
297
|
+
readonly role: keyof Cases;
|
|
298
|
+
}> | Exclude<ModelRequest.ToolMessage, {
|
|
299
|
+
readonly role: keyof Cases;
|
|
300
|
+
}>) => any>(cases: Cases, orElse: OrElse): (value: ModelRequest.UserMessage | ModelRequest.AssistantMessage | ModelRequest.ToolMessage) => import("effect/Unify").Unify<{ [K_1 in keyof Cases]-?: NonNullable<Cases[K_1]> extends (...args: Array<any>) => infer R ? R : never; }[keyof Cases] | ReturnType<OrElse>>;
|
|
301
|
+
};
|
|
302
|
+
} & {
|
|
303
|
+
make: (message: ModelRequest.Message) => ModelRequest.Message;
|
|
304
|
+
user: (content: string | ModelRequest.TextPart | ReadonlyArray<ModelRequest.TextPart>) => ModelRequest.UserMessage;
|
|
305
|
+
assistant: (content: string | ModelRequest.AssistantContentPart | ReadonlyArray<ModelRequest.AssistantContentPart>, options?: {
|
|
306
|
+
readonly stopReason?: ModelRequest.StopReason | undefined;
|
|
307
|
+
readonly responseId?: string | undefined;
|
|
308
|
+
readonly itemIds?: ReadonlyArray<string> | undefined;
|
|
309
|
+
}) => ModelRequest.AssistantMessage;
|
|
310
|
+
tool: (content: ModelRequest.ToolResultPart | ReadonlyArray<ModelRequest.ToolResultPart>) => ModelRequest.ToolMessage;
|
|
311
|
+
}>>;
|
|
312
|
+
/**
|
|
313
|
+
* Keys of the memory rows among `supervisor`, which the run has now been
|
|
314
|
+
* shown. Absent from boundaries that delivered none.
|
|
315
|
+
*/
|
|
316
|
+
readonly memory: Schema.optional<Schema.$Array<Schema.String>>;
|
|
317
|
+
/** The monitor whose message leads `supervisor`, when one was delivered. */
|
|
318
|
+
readonly monitor: Schema.optional<Schema.String>;
|
|
319
|
+
/** Crossed monitors this boundary withheld, and why. Absent when none was. */
|
|
320
|
+
readonly suppressed: Schema.optional<Schema.$Array<Schema.Struct<{
|
|
321
|
+
readonly id: Schema.String;
|
|
322
|
+
readonly reason: Schema.Literals<readonly ["streak", "cooldown", "limit", "slot"]>;
|
|
323
|
+
}>>>;
|
|
324
|
+
/**
|
|
325
|
+
* The monitor ledger after this boundary gated a reading, which the run
|
|
326
|
+
* carries into its next frame. Absent from boundaries that gated none.
|
|
327
|
+
*/
|
|
328
|
+
readonly monitorLedger: Schema.optional<Schema.$Record<Schema.String, Schema.Struct<{
|
|
329
|
+
readonly streak: Schema.Int;
|
|
330
|
+
readonly delivered: Schema.Int;
|
|
331
|
+
readonly lastFrame: Schema.Int;
|
|
332
|
+
}>>>;
|
|
333
|
+
/**
|
|
334
|
+
* Jev's answers about transcript segments, by digest, which the run stores
|
|
335
|
+
* for its next compaction. The model is not sent them. Absent from
|
|
336
|
+
* boundaries that took none.
|
|
337
|
+
*/
|
|
338
|
+
readonly marks: Schema.optional<Schema.$Array<Schema.Struct<{
|
|
339
|
+
readonly remove: Schema.Number;
|
|
340
|
+
readonly keep: Schema.Number;
|
|
341
|
+
readonly digest: Schema.String;
|
|
342
|
+
}>>>;
|
|
343
|
+
/**
|
|
344
|
+
* The context triggers the delivered supervisor reading fired, which
|
|
345
|
+
* compact the run at its next frame. Absent from boundaries that took none.
|
|
346
|
+
*/
|
|
347
|
+
readonly compact: Schema.optional<Schema.$Array<Schema.Literals<readonly ["budget", "outdated_context", "irrelevant_context"]>>>;
|
|
348
|
+
}>;
|
|
349
|
+
/**
|
|
350
|
+
* The journaled record of one turn-boundary drain.
|
|
351
|
+
*
|
|
352
|
+
* @category models
|
|
353
|
+
* @since 0.1.0
|
|
354
|
+
* @slop
|
|
355
|
+
*/
|
|
356
|
+
export type DrainRecord = typeof DrainRecord.Type;
|
|
357
|
+
/**
|
|
358
|
+
* Projects a {@link Drain} into its journaled record.
|
|
359
|
+
*
|
|
360
|
+
* @category conversions
|
|
361
|
+
* @since 0.1.0
|
|
362
|
+
* @slop
|
|
363
|
+
*/
|
|
364
|
+
export declare const drainRecord: (drain: Drain) => DrainRecord;
|
|
365
|
+
/**
|
|
366
|
+
* Creates an empty immutable steering queue.
|
|
367
|
+
*
|
|
368
|
+
* @category constructors
|
|
369
|
+
* @since 0.1.0
|
|
370
|
+
* @slop
|
|
371
|
+
*/
|
|
372
|
+
export declare const empty: () => Queue;
|
|
373
|
+
/**
|
|
374
|
+
* Appends an item without mutating the prior queue.
|
|
375
|
+
*
|
|
376
|
+
* @category operations
|
|
377
|
+
* @since 0.1.0
|
|
378
|
+
* @slop
|
|
379
|
+
*/
|
|
380
|
+
export declare const enqueue: (queue: Queue, item: Item) => Queue;
|
|
381
|
+
/**
|
|
382
|
+
* Drains only items admitted at or before the turn's fixed cutoff.
|
|
383
|
+
*
|
|
384
|
+
* @category operations
|
|
385
|
+
* @since 0.1.0
|
|
386
|
+
* @slop
|
|
387
|
+
*/
|
|
388
|
+
export declare const drainAtClose: (queue: Queue, cutoff: number) => Drain;
|
|
389
|
+
/**
|
|
390
|
+
* Source of a serializable steering-queue snapshot. Storage and persistence
|
|
391
|
+
* promotion are deliberately supplied by the host.
|
|
392
|
+
*
|
|
393
|
+
* @category services
|
|
394
|
+
* @since 0.1.0
|
|
395
|
+
* @slop
|
|
396
|
+
*/
|
|
397
|
+
export interface Source {
|
|
398
|
+
readonly read: () => Effect.Effect<Queue, HarnessError>;
|
|
399
|
+
/**
|
|
400
|
+
* Promotes what one boundary may deliver.
|
|
401
|
+
*
|
|
402
|
+
* A drain is IDEMPOTENT in its boundary string: a second drain at one
|
|
403
|
+
* boundary promotes nothing and hands back exactly what the first one
|
|
404
|
+
* promoted, with {@link Drain.duplicate} set. That is not an optimization, it
|
|
405
|
+
* is the contract a resumed run depends on — a re-executed frame drains the
|
|
406
|
+
* boundaries it already drained and must be told the same thing, or it
|
|
407
|
+
* rebuilds a different context and re-keys every later sealed step. A source
|
|
408
|
+
* that promotes afresh each time cannot answer a parked run and will deliver
|
|
409
|
+
* one message many times.
|
|
410
|
+
*/
|
|
411
|
+
readonly drain: (input: BoundaryInput) => Effect.Effect<Drain, HarnessError>;
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* The methods {@link make} needs to build a {@link Source}.
|
|
415
|
+
*
|
|
416
|
+
* @category models
|
|
417
|
+
* @since 0.1.0
|
|
418
|
+
* @slop
|
|
419
|
+
*/
|
|
420
|
+
export interface SourceInput {
|
|
421
|
+
readonly read: () => Effect.Effect<Queue, HarnessError>;
|
|
422
|
+
readonly drain: (input: BoundaryInput) => Effect.Effect<Drain, HarnessError>;
|
|
423
|
+
}
|
|
424
|
+
/**
|
|
425
|
+
* Service tag for the external steering queue source.
|
|
426
|
+
*
|
|
427
|
+
* @category services
|
|
428
|
+
* @since 0.1.0
|
|
429
|
+
* @slop
|
|
430
|
+
*/
|
|
431
|
+
export declare const Source: Context.Service<Source, Source>;
|
|
432
|
+
/**
|
|
433
|
+
* Constructs a steering source service.
|
|
434
|
+
*
|
|
435
|
+
* @category constructors
|
|
436
|
+
* @since 0.1.0
|
|
437
|
+
* @slop
|
|
438
|
+
*/
|
|
439
|
+
export declare const make: (implementation: SourceInput) => Source;
|
|
440
|
+
/**
|
|
441
|
+
* Creates a source that always returns an empty queue.
|
|
442
|
+
*
|
|
443
|
+
* @category constructors
|
|
444
|
+
* @since 0.1.0
|
|
445
|
+
* @slop
|
|
446
|
+
*/
|
|
447
|
+
export declare const makeNoop: (overrides?: Partial<Source>) => Source;
|
|
448
|
+
/**
|
|
449
|
+
* Provides a steering source as a layer.
|
|
450
|
+
*
|
|
451
|
+
* @category layers
|
|
452
|
+
* @since 0.1.0
|
|
453
|
+
* @slop
|
|
454
|
+
*/
|
|
455
|
+
export declare const layer: (implementation: SourceInput) => Layer.Layer<Source>;
|
|
456
|
+
/**
|
|
457
|
+
* Provides an empty steering source as a layer.
|
|
458
|
+
*
|
|
459
|
+
* @category layers
|
|
460
|
+
* @since 0.1.0
|
|
461
|
+
* @slop
|
|
462
|
+
*/
|
|
463
|
+
export declare const layerNoop: (overrides?: Partial<Source>) => Layer.Layer<Source>;
|
|
464
|
+
//# sourceMappingURL=Steering.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Steering.d.ts","sourceRoot":"","sources":["../../src/Steering.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turn-boundary steering values and their source contract.
|
|
3
|
+
*
|
|
4
|
+
* Governing design: `../docs/concepts.md#notification-queue`.
|
|
5
|
+
*
|
|
6
|
+
* @since 0.1.0
|
|
7
|
+
*/
|
|
8
|
+
import * as ModelRequest from "@smthrs/model/ModelRequest";
|
|
9
|
+
import { Context, Effect, Layer, Schema } from "effect";
|
|
10
|
+
import * as AgentEvent from "./AgentEvent.js";
|
|
11
|
+
import * as compactionMarks from "./internal/compactionMarks.js";
|
|
12
|
+
import * as Monitor from "./Monitor.js";
|
|
13
|
+
const SeatChangeRecord = Schema.Struct({
|
|
14
|
+
_tag: Schema.Literal("SeatChange"),
|
|
15
|
+
delivery: Schema.Literal("steer"),
|
|
16
|
+
admittedAt: Schema.Number,
|
|
17
|
+
seat: Schema.String
|
|
18
|
+
});
|
|
19
|
+
const ThinkingChangeRecord = Schema.Struct({
|
|
20
|
+
_tag: Schema.Literal("ThinkingChange"),
|
|
21
|
+
delivery: Schema.Literal("steer"),
|
|
22
|
+
admittedAt: Schema.Number,
|
|
23
|
+
thinking: ModelRequest.ReasoningEffort
|
|
24
|
+
});
|
|
25
|
+
/**
|
|
26
|
+
* The journaled record of one turn-boundary drain.
|
|
27
|
+
*
|
|
28
|
+
* A drain consumes host queue state, so it is a nondeterministic read: the
|
|
29
|
+
* controller journals exactly this projection through `EngineLike.record`,
|
|
30
|
+
* keyed on the frame and boundary, and a re-executed frame replays the record
|
|
31
|
+
* instead of draining an already-drained queue. Everything the controller
|
|
32
|
+
* folds into durable state is here; `remaining` is host queue bookkeeping and
|
|
33
|
+
* deliberately is not.
|
|
34
|
+
*
|
|
35
|
+
* @category schemas
|
|
36
|
+
* @since 0.1.0
|
|
37
|
+
* @slop
|
|
38
|
+
*/
|
|
39
|
+
export const DrainRecord = Schema.Struct({
|
|
40
|
+
inserts: Schema.Array(ModelRequest.Message),
|
|
41
|
+
seatChanges: Schema.Array(Schema.Union([SeatChangeRecord, ThinkingChangeRecord])),
|
|
42
|
+
queued: Schema.Boolean,
|
|
43
|
+
/**
|
|
44
|
+
* Messages the run's supervisor delivers at this boundary, kept apart from
|
|
45
|
+
* `inserts` because they are not the person's words: the model reads them,
|
|
46
|
+
* and the completion brake's task never does. Absent from records written
|
|
47
|
+
* before the supervisor had a field of its own, and from boundaries it
|
|
48
|
+
* delivered nothing at.
|
|
49
|
+
*/
|
|
50
|
+
supervisor: Schema.optional(Schema.Array(ModelRequest.Message)),
|
|
51
|
+
/**
|
|
52
|
+
* Keys of the memory rows among `supervisor`, which the run has now been
|
|
53
|
+
* shown. Absent from boundaries that delivered none.
|
|
54
|
+
*/
|
|
55
|
+
memory: Schema.optional(Schema.Array(Schema.String)),
|
|
56
|
+
/** The monitor whose message leads `supervisor`, when one was delivered. */
|
|
57
|
+
monitor: Schema.optional(Schema.String),
|
|
58
|
+
/** Crossed monitors this boundary withheld, and why. Absent when none was. */
|
|
59
|
+
suppressed: Schema.optional(Schema.Array(Schema.Struct({ id: Schema.String, reason: AgentEvent.Suppression }))),
|
|
60
|
+
/**
|
|
61
|
+
* The monitor ledger after this boundary gated a reading, which the run
|
|
62
|
+
* carries into its next frame. Absent from boundaries that gated none.
|
|
63
|
+
*/
|
|
64
|
+
monitorLedger: Schema.optional(Monitor.Ledger),
|
|
65
|
+
/**
|
|
66
|
+
* Jev's answers about transcript segments, by digest, which the run stores
|
|
67
|
+
* for its next compaction. The model is not sent them. Absent from
|
|
68
|
+
* boundaries that took none.
|
|
69
|
+
*/
|
|
70
|
+
marks: Schema.optional(Schema.Array(compactionMarks.Marking)),
|
|
71
|
+
/**
|
|
72
|
+
* The context triggers the delivered supervisor reading fired, which
|
|
73
|
+
* compact the run at its next frame. Absent from boundaries that took none.
|
|
74
|
+
*/
|
|
75
|
+
compact: Schema.optional(Schema.Array(AgentEvent.CompactionCause))
|
|
76
|
+
});
|
|
77
|
+
/**
|
|
78
|
+
* Projects a {@link Drain} into its journaled record.
|
|
79
|
+
*
|
|
80
|
+
* @category conversions
|
|
81
|
+
* @since 0.1.0
|
|
82
|
+
* @slop
|
|
83
|
+
*/
|
|
84
|
+
export const drainRecord = (drain) => ({
|
|
85
|
+
inserts: drain.inserts,
|
|
86
|
+
seatChanges: drain.seatChanges,
|
|
87
|
+
queued: drain.queued
|
|
88
|
+
});
|
|
89
|
+
const immutable = (items) => Object.freeze({ items: Object.freeze([...items]) });
|
|
90
|
+
const immutableItem = (item) => Object.freeze({ ...item });
|
|
91
|
+
/**
|
|
92
|
+
* Creates an empty immutable steering queue.
|
|
93
|
+
*
|
|
94
|
+
* @category constructors
|
|
95
|
+
* @since 0.1.0
|
|
96
|
+
* @slop
|
|
97
|
+
*/
|
|
98
|
+
export const empty = () => immutable([]);
|
|
99
|
+
/**
|
|
100
|
+
* Appends an item without mutating the prior queue.
|
|
101
|
+
*
|
|
102
|
+
* @category operations
|
|
103
|
+
* @since 0.1.0
|
|
104
|
+
* @slop
|
|
105
|
+
*/
|
|
106
|
+
export const enqueue = (queue, item) => immutable([...queue.items, immutableItem(item)]);
|
|
107
|
+
/**
|
|
108
|
+
* Drains only items admitted at or before the turn's fixed cutoff.
|
|
109
|
+
*
|
|
110
|
+
* @category operations
|
|
111
|
+
* @since 0.1.0
|
|
112
|
+
* @slop
|
|
113
|
+
*/
|
|
114
|
+
export const drainAtClose = (queue, cutoff) => {
|
|
115
|
+
const inserts = [];
|
|
116
|
+
const seatChanges = [];
|
|
117
|
+
const remaining = [];
|
|
118
|
+
for (const item of queue.items) {
|
|
119
|
+
if (item.delivery === "queue" || item.admittedAt > cutoff) {
|
|
120
|
+
remaining.push(item);
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
switch (item._tag) {
|
|
124
|
+
case "Insert":
|
|
125
|
+
inserts.push(item.message);
|
|
126
|
+
break;
|
|
127
|
+
case "SeatChange":
|
|
128
|
+
case "ThinkingChange":
|
|
129
|
+
seatChanges.push(item);
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return {
|
|
134
|
+
inserts: Object.freeze(inserts),
|
|
135
|
+
seatChanges: Object.freeze(seatChanges),
|
|
136
|
+
remaining: immutable(remaining),
|
|
137
|
+
queued: false,
|
|
138
|
+
// An in-memory cutoff drain keeps no boundary ledger, so it can never say
|
|
139
|
+
// it has answered this boundary before.
|
|
140
|
+
duplicate: false
|
|
141
|
+
};
|
|
142
|
+
};
|
|
143
|
+
/**
|
|
144
|
+
* Service tag for the external steering queue source.
|
|
145
|
+
*
|
|
146
|
+
* @category services
|
|
147
|
+
* @since 0.1.0
|
|
148
|
+
* @slop
|
|
149
|
+
*/
|
|
150
|
+
export const Source = Context.Service("@smthrs/harness/Steering/Source");
|
|
151
|
+
/**
|
|
152
|
+
* Constructs a steering source service.
|
|
153
|
+
*
|
|
154
|
+
* @category constructors
|
|
155
|
+
* @since 0.1.0
|
|
156
|
+
* @slop
|
|
157
|
+
*/
|
|
158
|
+
export const make = (implementation) => Source.of(implementation);
|
|
159
|
+
/**
|
|
160
|
+
* Creates a source that always returns an empty queue.
|
|
161
|
+
*
|
|
162
|
+
* @category constructors
|
|
163
|
+
* @since 0.1.0
|
|
164
|
+
* @slop
|
|
165
|
+
*/
|
|
166
|
+
export const makeNoop = (overrides = {}) => make({
|
|
167
|
+
read: Effect.fn("Steering.Source.read")(() => Effect.succeed(empty())),
|
|
168
|
+
drain: Effect.fn("Steering.Source.drain")(() => Effect.succeed({
|
|
169
|
+
inserts: [],
|
|
170
|
+
seatChanges: [],
|
|
171
|
+
remaining: empty(),
|
|
172
|
+
queued: false,
|
|
173
|
+
duplicate: false
|
|
174
|
+
})),
|
|
175
|
+
...overrides
|
|
176
|
+
});
|
|
177
|
+
/**
|
|
178
|
+
* Provides a steering source as a layer.
|
|
179
|
+
*
|
|
180
|
+
* @category layers
|
|
181
|
+
* @since 0.1.0
|
|
182
|
+
* @slop
|
|
183
|
+
*/
|
|
184
|
+
export const layer = (implementation) => Layer.succeed(Source)(make(implementation));
|
|
185
|
+
/**
|
|
186
|
+
* Provides an empty steering source as a layer.
|
|
187
|
+
*
|
|
188
|
+
* @category layers
|
|
189
|
+
* @since 0.1.0
|
|
190
|
+
* @slop
|
|
191
|
+
*/
|
|
192
|
+
export const layerNoop = (overrides = {}) => Layer.succeed(Source)(makeNoop(overrides));
|
|
193
|
+
//# sourceMappingURL=Steering.js.map
|