@smthrs/harness 0.0.0-stage → 1.0.0-rc.4
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 +985 -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 +1142 -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,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var unfinishedWork_exports = {};
|
|
30
|
+
__export(unfinishedWork_exports, {
|
|
31
|
+
classifier: () => classifier,
|
|
32
|
+
incomplete: () => incomplete,
|
|
33
|
+
read: () => read,
|
|
34
|
+
reportedAt: () => reportedAt
|
|
35
|
+
});
|
|
36
|
+
module.exports = __toCommonJS(unfinishedWork_exports);
|
|
37
|
+
var Classifier = __toESM(require("@smthrs/model/Classifier"), 1);
|
|
38
|
+
var Evaluator = __toESM(require("@smthrs/model/Evaluator"), 1);
|
|
39
|
+
var import_effect = require("effect");
|
|
40
|
+
var CompletionClaim = __toESM(require("../CompletionClaim.js"), 1);
|
|
41
|
+
var import_HarnessError = require("../HarnessError.js");
|
|
42
|
+
var Judgement = __toESM(require("../Judgement.js"), 1);
|
|
43
|
+
var import_paidUsage = require("./paidUsage.js");
|
|
44
|
+
const classifier = Classifier.make("completion/unfinished", {
|
|
45
|
+
description: "Judge whether one agent's completion message itself reports that the work it was asked to do is unfinished.",
|
|
46
|
+
state: CompletionClaim.Evidence,
|
|
47
|
+
questions: {
|
|
48
|
+
unfinished: Classifier.boolean({
|
|
49
|
+
instructions: "Does the completion explicitly report that the requested work is unfinished, failed, or blocked? Judge what the completion says about its own outcome, not whether the task is actually done.",
|
|
50
|
+
criteria: {
|
|
51
|
+
true: "the completion plainly says it could not finish, could not fix, or was stopped from doing the requested work, instead of reporting success",
|
|
52
|
+
false: "the completion reports success, supplies the requested answer, or only notes that something it did was not verified"
|
|
53
|
+
}
|
|
54
|
+
})
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
const reportedAt = 0.9;
|
|
58
|
+
const read = (evidence, earlier) => Judgement.measured(classifier, evidence).pipe(
|
|
59
|
+
import_effect.Effect.map(({ answers, asked }) => ({
|
|
60
|
+
unfinished: answers.unfinished.probability,
|
|
61
|
+
latencyMs: asked.latencyMs,
|
|
62
|
+
...asked.usage === void 0 ? {} : { usage: asked.usage },
|
|
63
|
+
asked
|
|
64
|
+
})),
|
|
65
|
+
import_effect.Effect.mapError(
|
|
66
|
+
(error) => CompletionClaim.unjudged(
|
|
67
|
+
error.code,
|
|
68
|
+
Evaluator.publicMessage(error),
|
|
69
|
+
evidence.claim,
|
|
70
|
+
(0, import_paidUsage.failedReading)(error, earlier)
|
|
71
|
+
)
|
|
72
|
+
)
|
|
73
|
+
);
|
|
74
|
+
const incomplete = (complete, unfinished, claim) => new import_HarnessError.HarnessError({
|
|
75
|
+
code: "completion_incomplete",
|
|
76
|
+
message: `A completion reporting its own work unfinished: unfinished ${unfinished.toFixed(2)} (complete ${complete.toFixed(2)}). The run's report, word for word:
|
|
77
|
+
|
|
78
|
+
${CompletionClaim.refused(claim)}`
|
|
79
|
+
});
|
|
80
|
+
//# sourceMappingURL=unfinishedWork.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/internal/unfinishedWork.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * The completion that says, in its own words, that the work is not done.\n *\n * The claim brake's `complete` question may only ask for another frame: its\n * corpus found honest answers and honest reports of unfinished work reading\n * equally low, so a low reading alone is no verdict. What that left open is\n * the run that has no bounce left and still writes \"I could not finish X\n * because Y\": nothing refused it, so it stood, and a host settled a run that\n * did nothing as a completed one (#3009).\n *\n * So the verdict is asked separately and only there. Where the claim brake\n * read the completion as not done and has no bounce left to spend, one more\n * question asks whether the completion itself reports the work unfinished.\n * A completion that does ends the run as `completion_incomplete`, a typed\n * failure that quotes the run's own report, instead of standing. The question\n * is about the sentence, not the task: an answer, a delivered edit, or a note\n * that something went unverified is not a report of unfinished work, and\n * never reaches this question unless the claim brake had already read it as\n * not done.\n *\n * @since 1.0.0-rc.1\n * @private\n */\n\nimport * as Classifier from \"@smthrs/model/Classifier\"\nimport * as Evaluator from \"@smthrs/model/Evaluator\"\nimport { Effect } from \"effect\"\nimport * as CompletionClaim from \"../CompletionClaim.ts\"\nimport { HarnessError } from \"../HarnessError.ts\"\nimport * as Judgement from \"../Judgement.ts\"\nimport { failedReading } from \"./paidUsage.ts\"\n\n/**\n * The one question, asked of the evidence the claim brake already sent.\n *\n * @since 1.0.0-rc.1\n * @private\n */\nexport const classifier = Classifier.make(\"completion/unfinished\", {\n description:\n \"Judge whether one agent's completion message itself reports that the work it was asked to do is unfinished.\",\n state: CompletionClaim.Evidence,\n questions: {\n unfinished: Classifier.boolean({\n instructions:\n \"Does the completion explicitly report that the requested work is unfinished, failed, or blocked? Judge what the completion says about its own outcome, not whether the task is actually done.\",\n criteria: {\n true:\n \"the completion plainly says it could not finish, could not fix, or was stopped from doing the requested work, instead of reporting success\",\n false:\n \"the completion reports success, supplies the requested answer, or only notes that something it did was not verified\"\n }\n })\n }\n})\n\n/**\n * At or above this probability of \"unfinished\", the completion ends the run\n * as a failure rather than standing.\n *\n * @since 1.0.0-rc.1\n * @private\n */\nexport const reportedAt = 0.9\n\n/**\n * One reading of {@link classifier}, and what asking it cost.\n *\n * @since 1.0.0-rc.1\n * @private\n */\nexport interface Reading {\n readonly unfinished: number\n readonly latencyMs: number\n readonly usage?: Evaluator.Usage | undefined\n readonly asked: Judgement.Read<typeof classifier.questions>[\"asked\"]\n}\n\n/**\n * Asks the question over the claim brake's evidence. A reading that cannot\n * be had fails the turn as `completion_unjudged`, as the claim brake's own\n * does, and the cause carries what it paid with what the `earlier` readings\n * of the same completion paid, so a failed verdict does not lose their spend.\n *\n * @since 1.0.0-rc.1\n * @private\n */\nexport const read = (\n evidence: CompletionClaim.Evidence,\n earlier: Evaluator.Usage | undefined\n): Effect.Effect<Reading, HarnessError, Evaluator.Evaluator> =>\n Judgement.measured(classifier, evidence).pipe(\n Effect.map(({ answers, asked }): Reading => ({\n unfinished: answers.unfinished.probability,\n latencyMs: asked.latencyMs,\n ...(asked.usage === undefined ? {} : { usage: asked.usage }),\n asked\n })),\n Effect.mapError((error) =>\n CompletionClaim.unjudged(\n error.code,\n Evaluator.publicMessage(error),\n evidence.claim,\n failedReading(error, earlier)\n )\n )\n )\n\n/**\n * The failure a completion reporting its own work unfinished ends the run\n * with. It quotes the report, so the person keeps the run's explanation of\n * what is left, and carries both readings that decided it.\n *\n * @since 1.0.0-rc.1\n * @private\n */\nexport const incomplete = (complete: number, unfinished: number, claim: string): HarnessError =>\n new HarnessError({\n code: \"completion_incomplete\",\n message: `A completion reporting its own work unfinished: unfinished ${unfinished.toFixed(2)} (complete ${\n complete.toFixed(2)\n }). The run's report, word for word:\\n\\n${CompletionClaim.refused(claim)}`\n })\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBA,iBAA4B;AAC5B,gBAA2B;AAC3B,oBAAuB;AACvB,sBAAiC;AACjC,0BAA6B;AAC7B,gBAA2B;AAC3B,uBAA8B;AAQvB,MAAM,aAAa,WAAW,KAAK,yBAAyB;AAAA,EACjE,aACE;AAAA,EACF,OAAO,gBAAgB;AAAA,EACvB,WAAW;AAAA,IACT,YAAY,WAAW,QAAQ;AAAA,MAC7B,cACE;AAAA,MACF,UAAU;AAAA,QACR,MACE;AAAA,QACF,OACE;AAAA,MACJ;AAAA,IACF,CAAC;AAAA,EACH;AACF,CAAC;AASM,MAAM,aAAa;AAwBnB,MAAM,OAAO,CAClB,UACA,YAEA,UAAU,SAAS,YAAY,QAAQ,EAAE;AAAA,EACvC,qBAAO,IAAI,CAAC,EAAE,SAAS,MAAM,OAAgB;AAAA,IAC3C,YAAY,QAAQ,WAAW;AAAA,IAC/B,WAAW,MAAM;AAAA,IACjB,GAAI,MAAM,UAAU,SAAY,CAAC,IAAI,EAAE,OAAO,MAAM,MAAM;AAAA,IAC1D;AAAA,EACF,EAAE;AAAA,EACF,qBAAO;AAAA,IAAS,CAAC,UACf,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,UAAU,cAAc,KAAK;AAAA,MAC7B,SAAS;AAAA,UACT,gCAAc,OAAO,OAAO;AAAA,IAC9B;AAAA,EACF;AACF;AAUK,MAAM,aAAa,CAAC,UAAkB,YAAoB,UAC/D,IAAI,iCAAa;AAAA,EACf,MAAM;AAAA,EACN,SAAS,8DAA8D,WAAW,QAAQ,CAAC,CAAC,cAC1F,SAAS,QAAQ,CAAC,CACpB;AAAA;AAAA,EAA0C,gBAAgB,QAAQ,KAAK,CAAC;AAC1E,CAAC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The completion its own cell wrote before reading the calls it made.
|
|
3
|
+
*
|
|
4
|
+
* Several `cell` blocks in one reply run as one program, and the model writes
|
|
5
|
+
* the whole program before any call in it settles. A reply that probes and
|
|
6
|
+
* answers — `const seen = await ctx.call("bash", …)`, a `console.log` of `seen`,
|
|
7
|
+
* then `ctx.done(…)` — therefore completes the run before the model has read
|
|
8
|
+
* a byte of what it asked to see. Real seats do this about once in three
|
|
9
|
+
* deliveries even when their prompt says to answer in a later reply, and the
|
|
10
|
+
* answer is either an unverified claim or "blocked: output not observed".
|
|
11
|
+
*
|
|
12
|
+
* ## The rule, and what it spares
|
|
13
|
+
*
|
|
14
|
+
* A completion is handed back, once per run, when its own cell made a call,
|
|
15
|
+
* kept that call's result, and left it for the model alone: printed or
|
|
16
|
+
* bound, and read by nothing in the program but `console.*` and guards that
|
|
17
|
+
* only decide what `console.*` prints (`if (r.exitCode)` around a `console.log` of `r.stderr`),
|
|
18
|
+
* so the completion reads no result either. It is also handed back when the
|
|
19
|
+
* program acted on some results but a completion that reads none — in its
|
|
20
|
+
* output or a guard around it — follows a result the program only printed.
|
|
21
|
+
* The next frame is shown the results and asked to answer after reading them.
|
|
22
|
+
*
|
|
23
|
+
* Three shapes are spared because nothing in them was written blind:
|
|
24
|
+
*
|
|
25
|
+
* - a completion that reads a call's result — in its output, or in a guard
|
|
26
|
+
* around it. `if (after.exitCode === 0) ctx.done(…)` is the shape the cell
|
|
27
|
+
* contract teaches: the program, not the model's memory, decides the
|
|
28
|
+
* verdict. Reading is transitive through the program's own bindings, so
|
|
29
|
+
* `result.summary = seen.stdout; ctx.done(JSON.stringify(result))` reads.
|
|
30
|
+
* - a cell whose program acts on a result: passes it into another call, or
|
|
31
|
+
* branches on it. The contract teaches deriving later inputs from earlier
|
|
32
|
+
* results inside one cell, and a cell that asked, saved the answer and
|
|
33
|
+
* completed did what it set out to do without the model reading anything.
|
|
34
|
+
* - a cell whose calls are all effects whose result it discarded, such as
|
|
35
|
+
* `await ctx.call("edit", …)` as a statement of its own. The cell never
|
|
36
|
+
* asked to see anything, and a failed effect is `FailedCall`'s demand.
|
|
37
|
+
*
|
|
38
|
+
* The reading is a parse of the cell's source, so it is a pure function of
|
|
39
|
+
* the cell and a replay reaches the same decision. It reads names, not
|
|
40
|
+
* scopes, and what it cannot see through — a result handed to a function of
|
|
41
|
+
* the program's own, a `.then` callback, a completion reached through an
|
|
42
|
+
* alias — reads as acted on. A wrong refusal takes a legitimate answer away
|
|
43
|
+
* from every consumer of the harness, while a wrong pass costs one unread
|
|
44
|
+
* probe, so the rule fires only where the source leaves no other reading.
|
|
45
|
+
*
|
|
46
|
+
* @since 1.0.0-rc.1
|
|
47
|
+
* @private
|
|
48
|
+
*/
|
|
49
|
+
/**
|
|
50
|
+
* How many completions one run may have handed back for unread calls.
|
|
51
|
+
*
|
|
52
|
+
* One, like every measured demand: the frame that answers it has read the
|
|
53
|
+
* results, and asking again would be the loop grading that answer.
|
|
54
|
+
*
|
|
55
|
+
* @since 1.0.0-rc.1
|
|
56
|
+
* @private
|
|
57
|
+
*/
|
|
58
|
+
export declare const cap = 1;
|
|
59
|
+
/**
|
|
60
|
+
* The heading of the demand, so a transcript and a test can find it.
|
|
61
|
+
*
|
|
62
|
+
* @since 1.0.0-rc.1
|
|
63
|
+
* @private
|
|
64
|
+
*/
|
|
65
|
+
export declare const heading = "Answer written before its calls returned";
|
|
66
|
+
/** The frame accounting's view of one settled call. */
|
|
67
|
+
interface Settled {
|
|
68
|
+
readonly flow: string;
|
|
69
|
+
readonly ok: boolean;
|
|
70
|
+
readonly ordinal: number;
|
|
71
|
+
readonly summary: string;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* One call a completion was written without reading.
|
|
75
|
+
*
|
|
76
|
+
* @since 1.0.0-rc.1
|
|
77
|
+
* @private
|
|
78
|
+
*/
|
|
79
|
+
export interface Unobserved {
|
|
80
|
+
readonly flow: string;
|
|
81
|
+
readonly ok: boolean;
|
|
82
|
+
readonly ordinal: number;
|
|
83
|
+
readonly summary: string;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Whether a completing cell's source wrote its completion blind: it kept a
|
|
87
|
+
* call's result for the model alone and completed from code that reads none.
|
|
88
|
+
* A source that does not parse is never read as blind, because nothing here
|
|
89
|
+
* can say what it did.
|
|
90
|
+
*
|
|
91
|
+
* @since 1.0.0-rc.1
|
|
92
|
+
* @private
|
|
93
|
+
*/
|
|
94
|
+
export declare const blind: (source: string) => boolean;
|
|
95
|
+
/**
|
|
96
|
+
* The calls a completion was written without reading, oldest first: every
|
|
97
|
+
* call its own frame settled, when the cell wrote the completion blind.
|
|
98
|
+
*
|
|
99
|
+
* @since 1.0.0-rc.1
|
|
100
|
+
* @private
|
|
101
|
+
*/
|
|
102
|
+
export declare const find: (calls: ReadonlyArray<Settled>, source: string) => ReadonlyArray<Unobserved>;
|
|
103
|
+
/**
|
|
104
|
+
* The demand a blind completion is handed back with: the results it never
|
|
105
|
+
* read, then the correction.
|
|
106
|
+
*
|
|
107
|
+
* @since 1.0.0-rc.1
|
|
108
|
+
* @private
|
|
109
|
+
*/
|
|
110
|
+
export declare const demand: (calls: ReadonlyArray<Unobserved>) => string;
|
|
111
|
+
export {};
|
|
112
|
+
//# sourceMappingURL=unobservedCall.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unobservedCall.d.ts","sourceRoot":"","sources":["../../../src/internal/unobservedCall.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AAKH;;;;;;;;GAQG;AACH,eAAO,MAAM,GAAG,IAAI,CAAA;AAEpB;;;;;GAKG;AACH,eAAO,MAAM,OAAO,6CAA6C,CAAA;AAEjE,uDAAuD;AACvD,UAAU,OAAO;IACf,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AAuYD;;;;;;;;GAQG;AACH,eAAO,MAAM,KAAK,GAAI,QAAQ,MAAM,KAAG,OAoBtC,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,IAAI,GAAI,OAAO,aAAa,CAAC,OAAO,CAAC,EAAE,QAAQ,MAAM,KAAG,aAAa,CAAC,UAAU,CAGc,CAAA;AAE3G;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,GAAI,OAAO,aAAa,CAAC,UAAU,CAAC,KAAG,MAIK,CAAA"}
|
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var unobservedCall_exports = {};
|
|
20
|
+
__export(unobservedCall_exports, {
|
|
21
|
+
blind: () => blind,
|
|
22
|
+
cap: () => cap,
|
|
23
|
+
demand: () => demand,
|
|
24
|
+
find: () => find,
|
|
25
|
+
heading: () => heading
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(unobservedCall_exports);
|
|
28
|
+
var import_parser = require("@babel/parser");
|
|
29
|
+
const cap = 1;
|
|
30
|
+
const heading = "Answer written before its calls returned";
|
|
31
|
+
const isNode = (value) => value !== null && typeof value === "object" && typeof value.type === "string";
|
|
32
|
+
const skipped = /* @__PURE__ */ new Set(["loc", "start", "end", "extra", "leadingComments", "trailingComments", "innerComments"]);
|
|
33
|
+
const children = (node) => {
|
|
34
|
+
const found = [];
|
|
35
|
+
for (const [key, value] of Object.entries(node)) {
|
|
36
|
+
if (skipped.has(key)) continue;
|
|
37
|
+
if (Array.isArray(value)) {
|
|
38
|
+
for (const item of value) if (isNode(item)) found.push(item);
|
|
39
|
+
}
|
|
40
|
+
if (isNode(value)) found.push(value);
|
|
41
|
+
}
|
|
42
|
+
return found;
|
|
43
|
+
};
|
|
44
|
+
const ctxMember = (node, name) => (node.type === "MemberExpression" || node.type === "OptionalMemberExpression") && !node.computed && node.object.type === "Identifier" && node.object.name === "ctx" && node.property.type === "Identifier" && node.property.name === name;
|
|
45
|
+
const ctxCall = (node, name) => (node.type === "CallExpression" || node.type === "OptionalCallExpression") && ctxMember(node.callee, name);
|
|
46
|
+
const referencing = (node) => {
|
|
47
|
+
switch (node.type) {
|
|
48
|
+
case "MemberExpression":
|
|
49
|
+
case "OptionalMemberExpression":
|
|
50
|
+
return node.computed ? [node.object, node.property] : [node.object];
|
|
51
|
+
case "ObjectProperty":
|
|
52
|
+
return node.computed ? [node.key, node.value] : [node.value];
|
|
53
|
+
case "ObjectMethod":
|
|
54
|
+
case "ClassMethod":
|
|
55
|
+
case "ClassPrivateMethod":
|
|
56
|
+
return [...node.params, node.body];
|
|
57
|
+
default:
|
|
58
|
+
return children(node);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
const reads = (node, results) => {
|
|
62
|
+
if (ctxCall(node, "call")) return true;
|
|
63
|
+
if (node.type === "Identifier") return results.has(node.name);
|
|
64
|
+
return referencing(node).some((child) => reads(child, results));
|
|
65
|
+
};
|
|
66
|
+
const targets = (node) => {
|
|
67
|
+
switch (node.type) {
|
|
68
|
+
case "Identifier":
|
|
69
|
+
return [node.name];
|
|
70
|
+
case "MemberExpression":
|
|
71
|
+
case "OptionalMemberExpression":
|
|
72
|
+
return targets(node.object);
|
|
73
|
+
case "ObjectPattern":
|
|
74
|
+
return node.properties.flatMap((property) => targets(property.type === "RestElement" ? property : property.value));
|
|
75
|
+
case "ArrayPattern":
|
|
76
|
+
return node.elements.flatMap((element) => element === null ? [] : targets(element));
|
|
77
|
+
case "RestElement":
|
|
78
|
+
return targets(node.argument);
|
|
79
|
+
case "AssignmentPattern":
|
|
80
|
+
return targets(node.left);
|
|
81
|
+
default:
|
|
82
|
+
return [];
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
const realm = /* @__PURE__ */ new Set(["ctx", "console"]);
|
|
86
|
+
const flows = (root) => {
|
|
87
|
+
const found = [];
|
|
88
|
+
const visit = (node) => {
|
|
89
|
+
switch (node.type) {
|
|
90
|
+
case "VariableDeclarator":
|
|
91
|
+
if (node.init !== null && node.init !== void 0) found.push([targets(node.id), node.init]);
|
|
92
|
+
break;
|
|
93
|
+
case "AssignmentExpression":
|
|
94
|
+
found.push([targets(node.left), node.right]);
|
|
95
|
+
break;
|
|
96
|
+
case "FunctionDeclaration":
|
|
97
|
+
found.push([[node.id.name], node.body]);
|
|
98
|
+
break;
|
|
99
|
+
case "ForOfStatement":
|
|
100
|
+
case "ForInStatement":
|
|
101
|
+
found.push([
|
|
102
|
+
targets(node.left.type === "VariableDeclaration" ? node.left.declarations[0].id : node.left),
|
|
103
|
+
node.right
|
|
104
|
+
]);
|
|
105
|
+
break;
|
|
106
|
+
case "CallExpression":
|
|
107
|
+
case "OptionalCallExpression":
|
|
108
|
+
if (node.callee.type === "MemberExpression" || node.callee.type === "OptionalMemberExpression") {
|
|
109
|
+
for (const argument of node.arguments) found.push([targets(node.callee.object), argument]);
|
|
110
|
+
}
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
for (const child of children(node)) visit(child);
|
|
114
|
+
};
|
|
115
|
+
visit(root);
|
|
116
|
+
return found.map(([names, source]) => [names.filter((name) => !realm.has(name)), source]);
|
|
117
|
+
};
|
|
118
|
+
const resultNames = (root) => {
|
|
119
|
+
const moves = flows(root);
|
|
120
|
+
const results = /* @__PURE__ */ new Set();
|
|
121
|
+
for (let grew = true; grew; ) {
|
|
122
|
+
grew = false;
|
|
123
|
+
for (const [names, source] of moves) {
|
|
124
|
+
if (names.every((name) => results.has(name)) || !reads(source, results)) continue;
|
|
125
|
+
for (const name of names) results.add(name);
|
|
126
|
+
grew = true;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return results;
|
|
130
|
+
};
|
|
131
|
+
const mentions = (node, names) => node.type === "Identifier" ? names.has(node.name) : referencing(node).some((child) => mentions(child, names));
|
|
132
|
+
const resultsByCall = (root) => {
|
|
133
|
+
const moves = flows(root);
|
|
134
|
+
return moves.filter(([, source]) => reads(source, /* @__PURE__ */ new Set())).flatMap(
|
|
135
|
+
([names]) => names.map((name) => {
|
|
136
|
+
const held = /* @__PURE__ */ new Set([name]);
|
|
137
|
+
for (let grew = true; grew; ) {
|
|
138
|
+
grew = false;
|
|
139
|
+
for (const [targets2, source] of moves) {
|
|
140
|
+
if (targets2.every((target) => held.has(target)) || !mentions(source, held)) continue;
|
|
141
|
+
for (const target of targets2) held.add(target);
|
|
142
|
+
grew = true;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return held;
|
|
146
|
+
})
|
|
147
|
+
);
|
|
148
|
+
};
|
|
149
|
+
const completionReads = (root, results) => {
|
|
150
|
+
const visit = (node, guarded) => {
|
|
151
|
+
if (ctxCall(node, "done")) {
|
|
152
|
+
return guarded || node.arguments.some((argument) => reads(argument, results));
|
|
153
|
+
}
|
|
154
|
+
const parts = functionParts(node);
|
|
155
|
+
if (parts !== void 0) return parts.some((child) => visit(child, true));
|
|
156
|
+
let tests = [];
|
|
157
|
+
switch (node.type) {
|
|
158
|
+
case "IfStatement":
|
|
159
|
+
case "ConditionalExpression":
|
|
160
|
+
case "WhileStatement":
|
|
161
|
+
case "DoWhileStatement":
|
|
162
|
+
tests = [node.test];
|
|
163
|
+
break;
|
|
164
|
+
case "LogicalExpression":
|
|
165
|
+
tests = [node.left];
|
|
166
|
+
break;
|
|
167
|
+
case "SwitchStatement":
|
|
168
|
+
tests = [node.discriminant, ...node.cases.map((entry) => entry.test)];
|
|
169
|
+
break;
|
|
170
|
+
case "ForOfStatement":
|
|
171
|
+
case "ForInStatement":
|
|
172
|
+
tests = [node.right];
|
|
173
|
+
break;
|
|
174
|
+
case "CatchClause":
|
|
175
|
+
return visit(node.body, true);
|
|
176
|
+
}
|
|
177
|
+
const inner = guarded || tests.some((test) => test != null && reads(test, results));
|
|
178
|
+
return children(node).some((child) => visit(child, inner));
|
|
179
|
+
};
|
|
180
|
+
return visit(root, false);
|
|
181
|
+
};
|
|
182
|
+
const pure = /* @__PURE__ */ new Map([
|
|
183
|
+
["Promise", /* @__PURE__ */ new Set(["all", "allSettled", "any", "race", "resolve"])],
|
|
184
|
+
["JSON", /* @__PURE__ */ new Set(["parse", "stringify"])],
|
|
185
|
+
["Object", /* @__PURE__ */ new Set(["assign", "entries", "fromEntries", "keys", "values"])],
|
|
186
|
+
["Array", /* @__PURE__ */ new Set(["from", "of"])]
|
|
187
|
+
]);
|
|
188
|
+
const pureFunctions = /* @__PURE__ */ new Set(["String", "Number", "Boolean"]);
|
|
189
|
+
const keeping = /* @__PURE__ */ new Set(["push", "unshift", "add", "set", "append"]);
|
|
190
|
+
const functionParts = (node) => {
|
|
191
|
+
switch (node.type) {
|
|
192
|
+
case "FunctionExpression":
|
|
193
|
+
case "ArrowFunctionExpression":
|
|
194
|
+
case "FunctionDeclaration":
|
|
195
|
+
case "ObjectMethod":
|
|
196
|
+
case "ClassMethod":
|
|
197
|
+
case "ClassPrivateMethod":
|
|
198
|
+
return [...node.params, node.body];
|
|
199
|
+
default:
|
|
200
|
+
return void 0;
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
const functionLike = (node) => functionParts(node) !== void 0;
|
|
204
|
+
const consoleCall = (node) => {
|
|
205
|
+
if (node.type !== "CallExpression" && node.type !== "OptionalCallExpression") return false;
|
|
206
|
+
const member = memberName(node.callee);
|
|
207
|
+
return member !== void 0 && member[0].type === "Identifier" && member[0].name === "console" && !node.arguments.some(functionLike);
|
|
208
|
+
};
|
|
209
|
+
const logging = (node) => consoleCall(node) || node.type === "NullLiteral" || node.type === "Identifier" && node.name === "undefined" || node.type === "UnaryExpression" && node.operator === "void" && node.argument.type === "NumericLiteral" || node.type === "ConditionalExpression" && logging(node.consequent) && logging(node.alternate) || node.type === "LogicalExpression" && logging(node.right);
|
|
210
|
+
const loggingOnly = (node) => {
|
|
211
|
+
if (node === null || node === void 0) return true;
|
|
212
|
+
switch (node.type) {
|
|
213
|
+
case "EmptyStatement":
|
|
214
|
+
return true;
|
|
215
|
+
case "BlockStatement":
|
|
216
|
+
return node.body.every(loggingOnly);
|
|
217
|
+
case "ExpressionStatement":
|
|
218
|
+
return logging(node.expression);
|
|
219
|
+
case "IfStatement":
|
|
220
|
+
return loggingOnly(node.consequent) && loggingOnly(node.alternate);
|
|
221
|
+
case "SwitchStatement":
|
|
222
|
+
return node.cases.every(
|
|
223
|
+
(entry) => entry.consequent.every(
|
|
224
|
+
(statement) => statement.type === "BreakStatement" && statement.label === null || loggingOnly(statement)
|
|
225
|
+
)
|
|
226
|
+
);
|
|
227
|
+
default:
|
|
228
|
+
return false;
|
|
229
|
+
}
|
|
230
|
+
};
|
|
231
|
+
const memberName = (callee) => (callee.type === "MemberExpression" || callee.type === "OptionalMemberExpression") && !callee.computed && callee.property.type === "Identifier" ? [callee.object, callee.property.name] : void 0;
|
|
232
|
+
const actsOn = (root, results, calls = true) => {
|
|
233
|
+
const reading = (node) => calls ? reads(node, results) : mentions(node, results);
|
|
234
|
+
const visit = (node, acting) => {
|
|
235
|
+
if (node.type === "Identifier") return acting && results.has(node.name);
|
|
236
|
+
const parts = functionParts(node);
|
|
237
|
+
if (parts !== void 0) return parts.some((child) => visit(child, true));
|
|
238
|
+
if (node.type === "ExpressionStatement" || node.type === "UnaryExpression" && node.operator === "void") {
|
|
239
|
+
const discarded = node.type === "ExpressionStatement" ? node.expression : node.argument;
|
|
240
|
+
const inner = discarded.type === "AwaitExpression" ? discarded.argument : discarded;
|
|
241
|
+
if (ctxCall(inner, "call")) {
|
|
242
|
+
return inner.arguments.some((argument) => visit(argument, true));
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
if (node.type === "CallExpression" || node.type === "OptionalCallExpression" || node.type === "NewExpression") {
|
|
246
|
+
const callee = node.callee;
|
|
247
|
+
const member = memberName(callee);
|
|
248
|
+
if (member !== void 0 && member[0].type === "Identifier" && member[0].name === "console") return false;
|
|
249
|
+
if (ctxCall(node, "call")) {
|
|
250
|
+
return calls && acting || node.arguments.some((argument) => visit(argument, true));
|
|
251
|
+
}
|
|
252
|
+
if (ctxCall(node, "done")) return node.arguments.some((argument) => visit(argument, true));
|
|
253
|
+
const readsCallee = reading(callee);
|
|
254
|
+
if (callee.type === "Identifier" && pureFunctions.has(callee.name) || member !== void 0 && member[0].type === "Identifier" && pure.get(member[0].name)?.has(member[1]) === true) return node.arguments.some((argument) => visit(argument, acting));
|
|
255
|
+
if (member !== void 0 && keeping.has(member[1])) {
|
|
256
|
+
return node.arguments.some((argument) => visit(argument, false));
|
|
257
|
+
}
|
|
258
|
+
if (member !== void 0 && readsCallee && !node.arguments.some(functionLike)) {
|
|
259
|
+
return visit(callee, acting) || node.arguments.some((argument) => visit(argument, acting));
|
|
260
|
+
}
|
|
261
|
+
return readsCallee || node.arguments.some((argument) => reading(argument));
|
|
262
|
+
}
|
|
263
|
+
if (node.type === "IfStatement" && loggingOnly(node)) {
|
|
264
|
+
return quietly(node.test) || visit(node.consequent, false) || node.alternate != null && visit(node.alternate, false);
|
|
265
|
+
}
|
|
266
|
+
if (node.type === "SwitchStatement" && loggingOnly(node)) {
|
|
267
|
+
return quietly(node.discriminant) || node.cases.some(
|
|
268
|
+
(entry) => entry.test != null && quietly(entry.test) || entry.consequent.some((statement) => visit(statement, false))
|
|
269
|
+
);
|
|
270
|
+
}
|
|
271
|
+
if (node.type === "ExpressionStatement" && loggingOnly(node)) return quietly(node.expression);
|
|
272
|
+
switch (node.type) {
|
|
273
|
+
case "VariableDeclarator":
|
|
274
|
+
return node.init != null && visit(node.init, false);
|
|
275
|
+
case "AssignmentExpression":
|
|
276
|
+
return visit(node.left, false) || visit(node.right, false);
|
|
277
|
+
case "ForOfStatement":
|
|
278
|
+
case "ForInStatement":
|
|
279
|
+
return visit(node.right, false) || visit(node.body, acting);
|
|
280
|
+
case "IfStatement":
|
|
281
|
+
case "ConditionalExpression":
|
|
282
|
+
case "WhileStatement":
|
|
283
|
+
case "DoWhileStatement":
|
|
284
|
+
if (visit(node.test, true)) return true;
|
|
285
|
+
break;
|
|
286
|
+
case "LogicalExpression":
|
|
287
|
+
if (visit(node.left, true)) return true;
|
|
288
|
+
break;
|
|
289
|
+
case "SwitchStatement":
|
|
290
|
+
if (visit(node.discriminant, true)) return true;
|
|
291
|
+
break;
|
|
292
|
+
case "SwitchCase":
|
|
293
|
+
if (node.test != null && visit(node.test, true)) return true;
|
|
294
|
+
break;
|
|
295
|
+
}
|
|
296
|
+
return referencing(node).some((child) => visit(child, acting));
|
|
297
|
+
};
|
|
298
|
+
const quietly = (node) => {
|
|
299
|
+
if (node.type === "ConditionalExpression") {
|
|
300
|
+
return quietly(node.test) || quietly(node.consequent) || quietly(node.alternate);
|
|
301
|
+
}
|
|
302
|
+
if (node.type === "LogicalExpression") return quietly(node.left) || quietly(node.right);
|
|
303
|
+
return visit(node, false);
|
|
304
|
+
};
|
|
305
|
+
return visit(root, true);
|
|
306
|
+
};
|
|
307
|
+
const keepsResult = (root) => {
|
|
308
|
+
const calls = [];
|
|
309
|
+
const discarded = /* @__PURE__ */ new Set();
|
|
310
|
+
const visit = (node) => {
|
|
311
|
+
if (ctxCall(node, "call")) calls.push(node);
|
|
312
|
+
if (node.type === "ExpressionStatement" || node.type === "UnaryExpression" && node.operator === "void") {
|
|
313
|
+
const inner = node.type === "ExpressionStatement" ? node.expression : node.argument;
|
|
314
|
+
discarded.add(inner.type === "AwaitExpression" ? inner.argument : inner);
|
|
315
|
+
}
|
|
316
|
+
for (const child of children(node)) visit(child);
|
|
317
|
+
};
|
|
318
|
+
visit(root);
|
|
319
|
+
return calls.some((call) => !discarded.has(call));
|
|
320
|
+
};
|
|
321
|
+
const blind = (source) => {
|
|
322
|
+
let program;
|
|
323
|
+
try {
|
|
324
|
+
program = (0, import_parser.parse)(source, {
|
|
325
|
+
sourceType: "script",
|
|
326
|
+
plugins: ["typescript"],
|
|
327
|
+
allowAwaitOutsideFunction: true,
|
|
328
|
+
allowReturnOutsideFunction: true,
|
|
329
|
+
errorRecovery: true
|
|
330
|
+
});
|
|
331
|
+
} catch {
|
|
332
|
+
return false;
|
|
333
|
+
}
|
|
334
|
+
if (!keepsResult(program.program)) return false;
|
|
335
|
+
const results = resultNames(program.program);
|
|
336
|
+
if (!actsOn(program.program, results)) return true;
|
|
337
|
+
if (completionReads(program.program, results)) return false;
|
|
338
|
+
return resultsByCall(program.program).some((held) => !actsOn(program.program, held, false));
|
|
339
|
+
};
|
|
340
|
+
const find = (calls, source) => calls.length === 0 || !blind(source) ? [] : calls.map((call) => ({ flow: call.flow, ok: call.ok, ordinal: call.ordinal, summary: call.summary }));
|
|
341
|
+
const demand = (calls) => `${heading}:
|
|
342
|
+
${calls.map((call) => `- ${call.ordinal}. ${call.flow} -> ${call.ok ? "ok" : "FAILED"}: ${call.summary}`).join("\n")}
|
|
343
|
+
|
|
344
|
+
Answer after reading the calls' output, in a reply of its own.`;
|
|
345
|
+
//# sourceMappingURL=unobservedCall.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/internal/unobservedCall.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * The completion its own cell wrote before reading the calls it made.\n *\n * Several `cell` blocks in one reply run as one program, and the model writes\n * the whole program before any call in it settles. A reply that probes and\n * answers \u2014 `const seen = await ctx.call(\"bash\", \u2026)`, a `console.log` of `seen`,\n * then `ctx.done(\u2026)` \u2014 therefore completes the run before the model has read\n * a byte of what it asked to see. Real seats do this about once in three\n * deliveries even when their prompt says to answer in a later reply, and the\n * answer is either an unverified claim or \"blocked: output not observed\".\n *\n * ## The rule, and what it spares\n *\n * A completion is handed back, once per run, when its own cell made a call,\n * kept that call's result, and left it for the model alone: printed or\n * bound, and read by nothing in the program but `console.*` and guards that\n * only decide what `console.*` prints (`if (r.exitCode)` around a `console.log` of `r.stderr`),\n * so the completion reads no result either. It is also handed back when the\n * program acted on some results but a completion that reads none \u2014 in its\n * output or a guard around it \u2014 follows a result the program only printed.\n * The next frame is shown the results and asked to answer after reading them.\n *\n * Three shapes are spared because nothing in them was written blind:\n *\n * - a completion that reads a call's result \u2014 in its output, or in a guard\n * around it. `if (after.exitCode === 0) ctx.done(\u2026)` is the shape the cell\n * contract teaches: the program, not the model's memory, decides the\n * verdict. Reading is transitive through the program's own bindings, so\n * `result.summary = seen.stdout; ctx.done(JSON.stringify(result))` reads.\n * - a cell whose program acts on a result: passes it into another call, or\n * branches on it. The contract teaches deriving later inputs from earlier\n * results inside one cell, and a cell that asked, saved the answer and\n * completed did what it set out to do without the model reading anything.\n * - a cell whose calls are all effects whose result it discarded, such as\n * `await ctx.call(\"edit\", \u2026)` as a statement of its own. The cell never\n * asked to see anything, and a failed effect is `FailedCall`'s demand.\n *\n * The reading is a parse of the cell's source, so it is a pure function of\n * the cell and a replay reaches the same decision. It reads names, not\n * scopes, and what it cannot see through \u2014 a result handed to a function of\n * the program's own, a `.then` callback, a completion reached through an\n * alias \u2014 reads as acted on. A wrong refusal takes a legitimate answer away\n * from every consumer of the harness, while a wrong pass costs one unread\n * probe, so the rule fires only where the source leaves no other reading.\n *\n * @since 1.0.0-rc.1\n * @private\n */\n\nimport { parse } from \"@babel/parser\"\nimport type * as Syntax from \"@babel/types\"\n\n/**\n * How many completions one run may have handed back for unread calls.\n *\n * One, like every measured demand: the frame that answers it has read the\n * results, and asking again would be the loop grading that answer.\n *\n * @since 1.0.0-rc.1\n * @private\n */\nexport const cap = 1\n\n/**\n * The heading of the demand, so a transcript and a test can find it.\n *\n * @since 1.0.0-rc.1\n * @private\n */\nexport const heading = \"Answer written before its calls returned\"\n\n/** The frame accounting's view of one settled call. */\ninterface Settled {\n readonly flow: string\n readonly ok: boolean\n readonly ordinal: number\n readonly summary: string\n}\n\n/**\n * One call a completion was written without reading.\n *\n * @since 1.0.0-rc.1\n * @private\n */\nexport interface Unobserved {\n readonly flow: string\n readonly ok: boolean\n readonly ordinal: number\n readonly summary: string\n}\n\ntype Node = Syntax.Node\n\nconst isNode = (value: unknown): value is Node =>\n value !== null && typeof value === \"object\" && typeof (value as { type?: unknown }).type === \"string\"\n\n/** Keys that hold positions, comments and parser detail rather than children. */\nconst skipped = new Set([\"loc\", \"start\", \"end\", \"extra\", \"leadingComments\", \"trailingComments\", \"innerComments\"])\n\nconst children = (node: Node): ReadonlyArray<Node> => {\n const found: Array<Node> = []\n for (const [key, value] of Object.entries(node)) {\n if (skipped.has(key)) continue\n if (Array.isArray(value)) { for (const item of value) if (isNode(item)) found.push(item) }\n if (isNode(value)) found.push(value)\n }\n return found\n}\n\nconst ctxMember = (node: Node, name: string): boolean =>\n (node.type === \"MemberExpression\" || node.type === \"OptionalMemberExpression\") && !node.computed &&\n node.object.type === \"Identifier\" && node.object.name === \"ctx\" &&\n node.property.type === \"Identifier\" && node.property.name === name\n\nconst ctxCall = (node: Node, name: string): boolean =>\n (node.type === \"CallExpression\" || node.type === \"OptionalCallExpression\") && ctxMember(node.callee, name)\n\n/**\n * The nodes a reference can hide in: a non-computed property or key names\n * nothing, so `x.seen` does not read `seen`.\n */\nconst referencing = (node: Node): ReadonlyArray<Node> => {\n switch (node.type) {\n case \"MemberExpression\":\n case \"OptionalMemberExpression\":\n return node.computed ? [node.object, node.property] : [node.object]\n case \"ObjectProperty\":\n return node.computed ? [node.key, node.value] : [node.value]\n case \"ObjectMethod\":\n case \"ClassMethod\":\n case \"ClassPrivateMethod\":\n return [...node.params, node.body]\n default:\n return children(node)\n }\n}\n\n/** Whether an expression makes a call or reads a name that holds a result. */\nconst reads = (node: Node, results: ReadonlySet<string>): boolean => {\n if (ctxCall(node, \"call\")) return true\n if (node.type === \"Identifier\") return results.has(node.name)\n return referencing(node).some((child) => reads(child, results))\n}\n\n/** The names a binding or assignment target writes; a member target writes its root. */\nconst targets = (node: Node): ReadonlyArray<string> => {\n switch (node.type) {\n case \"Identifier\":\n return [node.name]\n case \"MemberExpression\":\n case \"OptionalMemberExpression\":\n return targets(node.object)\n case \"ObjectPattern\":\n return node.properties.flatMap((property) => targets(property.type === \"RestElement\" ? property : property.value))\n case \"ArrayPattern\":\n return node.elements.flatMap((element) => element === null ? [] : targets(element))\n case \"RestElement\":\n return targets(node.argument)\n case \"AssignmentPattern\":\n return targets(node.left)\n default:\n return []\n }\n}\n\n/** The names `ctx` and `console` are the realm's, never a result's. */\nconst realm = new Set([\"ctx\", \"console\"])\n\n/** Every way the program moves a value into a name: `[targets, source]`. */\nconst flows = (root: Node): ReadonlyArray<readonly [ReadonlyArray<string>, Node]> => {\n const found: Array<readonly [ReadonlyArray<string>, Node]> = []\n const visit = (node: Node): void => {\n switch (node.type) {\n case \"VariableDeclarator\":\n if (node.init !== null && node.init !== undefined) found.push([targets(node.id), node.init])\n break\n case \"AssignmentExpression\":\n found.push([targets(node.left), node.right])\n break\n case \"FunctionDeclaration\":\n // A script's function declaration always has a name; only a module's\n // default export may omit it, and a cell is never a module.\n found.push([[node.id!.name], node.body])\n break\n case \"ForOfStatement\":\n case \"ForInStatement\":\n found.push([\n targets(node.left.type === \"VariableDeclaration\" ? node.left.declarations[0]!.id : node.left),\n node.right\n ])\n break\n case \"CallExpression\":\n case \"OptionalCallExpression\":\n // `results.push(seen)` keeps a result in `results`.\n if (node.callee.type === \"MemberExpression\" || node.callee.type === \"OptionalMemberExpression\") {\n for (const argument of node.arguments) found.push([targets(node.callee.object), argument])\n }\n break\n }\n for (const child of children(node)) visit(child)\n }\n visit(root)\n return found.map(([names, source]) => [names.filter((name) => !realm.has(name)), source] as const)\n}\n\n/** Every name that holds, directly or through the program's own bindings, a call's result. */\nconst resultNames = (root: Node): ReadonlySet<string> => {\n const moves = flows(root)\n const results = new Set<string>()\n for (let grew = true; grew;) {\n grew = false\n for (const [names, source] of moves) {\n if (names.every((name) => results.has(name)) || !reads(source, results)) continue\n for (const name of names) results.add(name)\n grew = true\n }\n }\n return results\n}\n\n/** Whether an expression reads a name in `names`, calls aside. */\nconst mentions = (node: Node, names: ReadonlySet<string>): boolean =>\n node.type === \"Identifier\" ? names.has(node.name) : referencing(node).some((child) => mentions(child, names))\n\n/**\n * Each name a call's result is bound to directly, with every name the\n * program's own bindings copy it into.\n */\nconst resultsByCall = (root: Node): ReadonlyArray<ReadonlySet<string>> => {\n const moves = flows(root)\n return moves.filter(([, source]) => reads(source, new Set())).flatMap(([names]) =>\n names.map((name) => {\n const held = new Set([name])\n for (let grew = true; grew;) {\n grew = false\n for (const [targets, source] of moves) {\n if (targets.every((target) => held.has(target)) || !mentions(source, held)) continue\n for (const target of targets) held.add(target)\n grew = true\n }\n }\n return held\n })\n )\n}\n\n/**\n * Whether a completion depends on a result: its output reads one, or a guard\n * around it (a condition, a loop over a result, a `catch`) does. A completion\n * inside a function of the program's own is out of sight and counts as\n * depending.\n */\nconst completionReads = (root: Node, results: ReadonlySet<string>): boolean => {\n const visit = (node: Node, guarded: boolean): boolean => {\n if (ctxCall(node, \"done\")) {\n return guarded || (node as Syntax.CallExpression).arguments.some((argument) => reads(argument, results))\n }\n const parts = functionParts(node)\n if (parts !== undefined) return parts.some((child) => visit(child, true))\n let tests: ReadonlyArray<Node | null | undefined> = []\n switch (node.type) {\n case \"IfStatement\":\n case \"ConditionalExpression\":\n case \"WhileStatement\":\n case \"DoWhileStatement\":\n tests = [node.test]\n break\n case \"LogicalExpression\":\n tests = [node.left]\n break\n case \"SwitchStatement\":\n tests = [node.discriminant, ...node.cases.map((entry) => entry.test)]\n break\n case \"ForOfStatement\":\n case \"ForInStatement\":\n tests = [node.right]\n break\n case \"CatchClause\":\n return visit(node.body, true)\n }\n const inner = guarded || tests.some((test) => test != null && reads(test, results))\n return children(node).some((child) => visit(child, inner))\n }\n return visit(root, false)\n}\n\n/** The realm's calls that only move a value: their arguments are read where their result is. */\nconst pure = new Map<string, ReadonlySet<string>>([\n [\"Promise\", new Set([\"all\", \"allSettled\", \"any\", \"race\", \"resolve\"])],\n [\"JSON\", new Set([\"parse\", \"stringify\"])],\n [\"Object\", new Set([\"assign\", \"entries\", \"fromEntries\", \"keys\", \"values\"])],\n [\"Array\", new Set([\"from\", \"of\"])]\n])\nconst pureFunctions = new Set([\"String\", \"Number\", \"Boolean\"])\n/** Methods that keep their argument in the receiver; `flows` follows it there. */\nconst keeping = new Set([\"push\", \"unshift\", \"add\", \"set\", \"append\"])\n\n/** A function's parameters and body, or nothing when the node is not a function. */\nconst functionParts = (node: Node): ReadonlyArray<Node> | undefined => {\n switch (node.type) {\n case \"FunctionExpression\":\n case \"ArrowFunctionExpression\":\n case \"FunctionDeclaration\":\n case \"ObjectMethod\":\n case \"ClassMethod\":\n case \"ClassPrivateMethod\":\n return [...node.params, node.body]\n default:\n return undefined\n }\n}\n\nconst functionLike = (node: Node): boolean => functionParts(node) !== undefined\n\nconst consoleCall = (node: Node): boolean => {\n if (node.type !== \"CallExpression\" && node.type !== \"OptionalCallExpression\") return false\n const member = memberName(node.callee)\n return member !== undefined && member[0].type === \"Identifier\" && member[0].name === \"console\" &&\n !node.arguments.some(functionLike)\n}\n\n/** An expression that only prints, or yields nothing: a `console.log` of `r`, `null`, `void 0`. */\nconst logging = (node: Node): boolean =>\n consoleCall(node) || node.type === \"NullLiteral\" || (node.type === \"Identifier\" && node.name === \"undefined\") ||\n (node.type === \"UnaryExpression\" && node.operator === \"void\" && node.argument.type === \"NumericLiteral\") ||\n (node.type === \"ConditionalExpression\" && logging(node.consequent) && logging(node.alternate)) ||\n (node.type === \"LogicalExpression\" && logging(node.right))\n\n/**\n * A statement that only prints, whatever it prints under: a guard such as\n * `if (r.exitCode)` around a `console.log` of `r.stderr` shows a result to the model and\n * decides nothing, so the result it tests stays unread by the program. A\n * `return`, `throw`, `break` out of a loop, or any other statement is control\n * flow or an effect and is not logging.\n */\nconst loggingOnly = (node: Node | null | undefined): boolean => {\n if (node === null || node === undefined) return true\n switch (node.type) {\n case \"EmptyStatement\":\n return true\n case \"BlockStatement\":\n return node.body.every(loggingOnly)\n case \"ExpressionStatement\":\n return logging(node.expression)\n case \"IfStatement\":\n return loggingOnly(node.consequent) && loggingOnly(node.alternate)\n case \"SwitchStatement\":\n return node.cases.every((entry) =>\n entry.consequent.every((statement) =>\n (statement.type === \"BreakStatement\" && statement.label === null) || loggingOnly(statement)\n )\n )\n default:\n return false\n }\n}\n\nconst memberName = (callee: Node): readonly [Node, string] | undefined =>\n (callee.type === \"MemberExpression\" || callee.type === \"OptionalMemberExpression\") && !callee.computed &&\n callee.property.type === \"Identifier\"\n ? [callee.object, callee.property.name]\n : undefined\n\n/**\n * Whether the program acts on a result: reads a call or a name holding a\n * result anywhere but inside `console.*`, and other than by copying it into\n * another name, which is followed through that name.\n *\n * Copying is narrow on purpose: the source of a binding or assignment, the\n * argument of `push` and its kin, and the realm's value-moving functions\n * (`JSON.parse`, `Promise.all`, a method of the result itself). Anything the\n * parse cannot see through \u2014 a function of the program's own, a callback, a\n * `.then`, an alias \u2014 is an act, because the program may complete from there.\n */\nconst actsOn = (root: Node, results: ReadonlySet<string>, calls = true): boolean => {\n // Without `calls`, only the names count: a call read inline is some other result.\n const reading = (node: Node) => calls ? reads(node, results) : mentions(node, results)\n const visit = (node: Node, acting: boolean): boolean => {\n if (node.type === \"Identifier\") return acting && results.has(node.name)\n const parts = functionParts(node)\n // A function's body runs whenever the program calls it, so it acts.\n if (parts !== undefined) return parts.some((child) => visit(child, true))\n if (node.type === \"ExpressionStatement\" || (node.type === \"UnaryExpression\" && node.operator === \"void\")) {\n // An effect's result discarded as a statement of its own is not read.\n const discarded = node.type === \"ExpressionStatement\" ? node.expression : node.argument\n const inner = discarded.type === \"AwaitExpression\" ? discarded.argument : discarded\n if (ctxCall(inner, \"call\")) {\n return (inner as Syntax.CallExpression).arguments.some((argument) => visit(argument, true))\n }\n }\n if (node.type === \"CallExpression\" || node.type === \"OptionalCallExpression\" || node.type === \"NewExpression\") {\n const callee = node.callee\n const member = memberName(callee)\n if (member !== undefined && member[0].type === \"Identifier\" && member[0].name === \"console\") return false\n if (ctxCall(node, \"call\")) {\n return (calls && acting) || node.arguments.some((argument) => visit(argument, true))\n }\n if (ctxCall(node, \"done\")) return node.arguments.some((argument) => visit(argument, true))\n const readsCallee = reading(callee)\n if (\n (callee.type === \"Identifier\" && pureFunctions.has(callee.name)) ||\n (member !== undefined && member[0].type === \"Identifier\" && pure.get(member[0].name)?.has(member[1]) === true)\n ) return node.arguments.some((argument) => visit(argument, acting))\n if (member !== undefined && keeping.has(member[1])) {\n // `all.push(seen)` writes `all`; `flows` follows `seen` into it.\n return node.arguments.some((argument) => visit(argument, false))\n }\n if (member !== undefined && readsCallee && !node.arguments.some(functionLike)) {\n // A method of the result itself, such as `seen.stdout.trim()`.\n return visit(callee, acting) || node.arguments.some((argument) => visit(argument, acting))\n }\n return readsCallee || node.arguments.some((argument) => reading(argument))\n }\n // A guard around printing alone reads its test for the model, not the\n // program; only as a statement of its own, since `ctx.done(r.ok || null)`\n // reads `r`.\n if (node.type === \"IfStatement\" && loggingOnly(node)) {\n return quietly(node.test) || visit(node.consequent, false) ||\n (node.alternate != null && visit(node.alternate, false))\n }\n if (node.type === \"SwitchStatement\" && loggingOnly(node)) {\n return quietly(node.discriminant) ||\n node.cases.some((entry) =>\n (entry.test != null && quietly(entry.test)) || entry.consequent.some((statement) => visit(statement, false))\n )\n }\n if (node.type === \"ExpressionStatement\" && loggingOnly(node)) return quietly(node.expression)\n switch (node.type) {\n case \"VariableDeclarator\":\n return node.init != null && visit(node.init, false)\n case \"AssignmentExpression\":\n return visit(node.left, false) || visit(node.right, false)\n case \"ForOfStatement\":\n case \"ForInStatement\":\n return visit(node.right, false) || visit(node.body, acting)\n case \"IfStatement\":\n case \"ConditionalExpression\":\n case \"WhileStatement\":\n case \"DoWhileStatement\":\n if (visit(node.test, true)) return true\n break\n case \"LogicalExpression\":\n if (visit(node.left, true)) return true\n break\n case \"SwitchStatement\":\n if (visit(node.discriminant, true)) return true\n break\n case \"SwitchCase\":\n if (node.test != null && visit(node.test, true)) return true\n break\n }\n return referencing(node).some((child) => visit(child, acting))\n }\n /** An expression whose value only decides what is printed. */\n const quietly = (node: Node): boolean => {\n if (node.type === \"ConditionalExpression\") {\n return quietly(node.test) || quietly(node.consequent) || quietly(node.alternate)\n }\n if (node.type === \"LogicalExpression\") return quietly(node.left) || quietly(node.right)\n return visit(node, false)\n }\n return visit(root, true)\n}\n\n/** Whether a call's result is used at all, rather than discarded as a statement of its own. */\nconst keepsResult = (root: Node): boolean => {\n const calls: Array<Node> = []\n const discarded = new Set<Node>()\n const visit = (node: Node): void => {\n if (ctxCall(node, \"call\")) calls.push(node)\n if (node.type === \"ExpressionStatement\" || (node.type === \"UnaryExpression\" && node.operator === \"void\")) {\n const inner = node.type === \"ExpressionStatement\" ? node.expression : node.argument\n discarded.add(inner.type === \"AwaitExpression\" ? inner.argument : inner)\n }\n for (const child of children(node)) visit(child)\n }\n visit(root)\n return calls.some((call) => !discarded.has(call))\n}\n\n/**\n * Whether a completing cell's source wrote its completion blind: it kept a\n * call's result for the model alone and completed from code that reads none.\n * A source that does not parse is never read as blind, because nothing here\n * can say what it did.\n *\n * @since 1.0.0-rc.1\n * @private\n */\nexport const blind = (source: string): boolean => {\n let program: Syntax.File\n try {\n program = parse(source, {\n sourceType: \"script\",\n plugins: [\"typescript\"],\n allowAwaitOutsideFunction: true,\n allowReturnOutsideFunction: true,\n errorRecovery: true\n })\n } catch {\n return false\n }\n if (!keepsResult(program.program)) return false\n const results = resultNames(program.program)\n if (!actsOn(program.program, results)) return true\n // A program that acted on some results but completes from none of them\n // wrote its answer blind to any result it only printed.\n if (completionReads(program.program, results)) return false\n return resultsByCall(program.program).some((held) => !actsOn(program.program, held, false))\n}\n\n/**\n * The calls a completion was written without reading, oldest first: every\n * call its own frame settled, when the cell wrote the completion blind.\n *\n * @since 1.0.0-rc.1\n * @private\n */\nexport const find = (calls: ReadonlyArray<Settled>, source: string): ReadonlyArray<Unobserved> =>\n calls.length === 0 || !blind(source)\n ? []\n : calls.map((call) => ({ flow: call.flow, ok: call.ok, ordinal: call.ordinal, summary: call.summary }))\n\n/**\n * The demand a blind completion is handed back with: the results it never\n * read, then the correction.\n *\n * @since 1.0.0-rc.1\n * @private\n */\nexport const demand = (calls: ReadonlyArray<Unobserved>): string =>\n `${heading}:\n${calls.map((call) => `- ${call.ordinal}. ${call.flow} -> ${call.ok ? \"ok\" : \"FAILED\"}: ${call.summary}`).join(\"\\n\")}\n\nAnswer after reading the calls' output, in a reply of its own.`\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["targets"]
|
|
7
|
+
}
|