@plurnk/plurnk-service 4.2.1 → 4.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/INSTALL.md +7 -2
- package/README.md +3 -1
- package/SPEC.md +1977 -1397
- package/dist/build-info.d.ts.map +1 -1
- package/dist/build-info.js +25 -3
- package/dist/build-info.js.map +1 -1
- package/dist/build-info.json +1 -1
- package/dist/completions/_plurnk-service +1 -1
- package/dist/completions/plurnk-service.bash +1 -1
- package/dist/completions/plurnk-service.fish +1 -0
- package/dist/content/body-preview.js.map +1 -1
- package/dist/content/byte-view.d.ts.map +1 -1
- package/dist/content/byte-view.js +3 -2
- package/dist/content/byte-view.js.map +1 -1
- package/dist/content/edit-collision.d.ts +2 -1
- package/dist/content/edit-collision.d.ts.map +1 -1
- package/dist/content/edit-collision.js.map +1 -1
- package/dist/content/edit-receipt.d.ts.map +1 -1
- package/dist/content/edit-receipt.js +28 -23
- package/dist/content/edit-receipt.js.map +1 -1
- package/dist/content/edited-span.js +1 -1
- package/dist/content/edited-span.js.map +1 -1
- package/dist/content/line-anchors.d.ts +3 -2
- package/dist/content/line-anchors.d.ts.map +1 -1
- package/dist/content/line-anchors.js +33 -19
- package/dist/content/line-anchors.js.map +1 -1
- package/dist/content/line-selection.js.map +1 -1
- package/dist/content/pattern-edits.js +1 -1
- package/dist/content/pattern-edits.js.map +1 -1
- package/dist/content/read-projector.d.ts +1 -1
- package/dist/content/read-projector.d.ts.map +1 -1
- package/dist/content/read-projector.js +10 -8
- package/dist/content/read-projector.js.map +1 -1
- package/dist/content/read-resolve.d.ts.map +1 -1
- package/dist/content/read-resolve.js +6 -5
- package/dist/content/read-resolve.js.map +1 -1
- package/dist/core/AdmittedTurnExecutor.d.ts +4 -4
- package/dist/core/AdmittedTurnExecutor.d.ts.map +1 -1
- package/dist/core/AdmittedTurnExecutor.js +20 -18
- package/dist/core/AdmittedTurnExecutor.js.map +1 -1
- package/dist/core/AmbientMembers.d.ts +1 -1
- package/dist/core/AmbientMembers.d.ts.map +1 -1
- package/dist/core/AmbientMembers.js +5 -2
- package/dist/core/AmbientMembers.js.map +1 -1
- package/dist/core/BareBatchRunner.d.ts +1 -1
- package/dist/core/BareBatchRunner.d.ts.map +1 -1
- package/dist/core/BareBatchRunner.js +2 -2
- package/dist/core/BareBatchRunner.js.map +1 -1
- package/dist/core/CapabilityPolicies.js.map +1 -1
- package/dist/core/CapabilityResolver.d.ts +1 -2
- package/dist/core/CapabilityResolver.d.ts.map +1 -1
- package/dist/core/CapabilityResolver.js +11 -7
- package/dist/core/CapabilityResolver.js.map +1 -1
- package/dist/core/ChannelWrite.d.ts +2 -2
- package/dist/core/ChannelWrite.d.ts.map +1 -1
- package/dist/core/ChannelWrite.js.map +1 -1
- package/dist/core/ChannelWrite.sql +27 -0
- package/dist/core/ClientInteractions.js.map +1 -1
- package/dist/core/ContextFit.js +1 -1
- package/dist/core/ContextFit.js.map +1 -1
- package/dist/core/CoreSchemeServices.d.ts.map +1 -1
- package/dist/core/CoreSchemeServices.js +4 -4
- package/dist/core/CoreSchemeServices.js.map +1 -1
- package/dist/core/DataStatementRunner.d.ts.map +1 -1
- package/dist/core/DataStatementRunner.js +15 -15
- package/dist/core/DataStatementRunner.js.map +1 -1
- package/dist/core/Dispatcher.d.ts +29 -5
- package/dist/core/Dispatcher.d.ts.map +1 -1
- package/dist/core/Dispatcher.js +210 -130
- package/dist/core/Dispatcher.js.map +1 -1
- package/dist/core/EditMutations.d.ts.map +1 -1
- package/dist/core/EditMutations.js +12 -6
- package/dist/core/EditMutations.js.map +1 -1
- package/dist/core/EditSequence.js.map +1 -1
- package/dist/core/Engine.d.ts +12 -6
- package/dist/core/Engine.d.ts.map +1 -1
- package/dist/core/Engine.js +29 -7
- package/dist/core/Engine.js.map +1 -1
- package/dist/core/ExecutionOutputs.js.map +1 -1
- package/dist/core/ExecutorRegistry.d.ts +1 -2
- package/dist/core/ExecutorRegistry.d.ts.map +1 -1
- package/dist/core/ExecutorRegistry.js +2 -2
- package/dist/core/ExecutorRegistry.js.map +1 -1
- package/dist/core/FileAddress.js.map +1 -1
- package/dist/core/FilePublication.d.ts.map +1 -1
- package/dist/core/FilePublication.js +6 -3
- package/dist/core/FilePublication.js.map +1 -1
- package/dist/core/FileSnapshot.d.ts.map +1 -1
- package/dist/core/FileSnapshot.js +8 -5
- package/dist/core/FileSnapshot.js.map +1 -1
- package/dist/core/KillHandler.d.ts.map +1 -1
- package/dist/core/KillHandler.js +7 -0
- package/dist/core/KillHandler.js.map +1 -1
- package/dist/core/LiveSubscription.d.ts +1 -0
- package/dist/core/LiveSubscription.d.ts.map +1 -1
- package/dist/core/LiveSubscription.js +3 -2
- package/dist/core/LiveSubscription.js.map +1 -1
- package/dist/core/LiveSubscriptions.d.ts +4 -1
- package/dist/core/LiveSubscriptions.d.ts.map +1 -1
- package/dist/core/LiveSubscriptions.js +42 -1
- package/dist/core/LiveSubscriptions.js.map +1 -1
- package/dist/core/LogBody.d.ts.map +1 -1
- package/dist/core/LogBody.js +22 -19
- package/dist/core/LogBody.js.map +1 -1
- package/dist/core/LogVisibility.d.ts +1 -1
- package/dist/core/LogVisibility.d.ts.map +1 -1
- package/dist/core/LogVisibility.js +4 -6
- package/dist/core/LogVisibility.js.map +1 -1
- package/dist/core/LogWriter.d.ts.map +1 -1
- package/dist/core/LogWriter.js +6 -9
- package/dist/core/LogWriter.js.map +1 -1
- package/dist/core/LoopDriver.d.ts +4 -4
- package/dist/core/LoopDriver.d.ts.map +1 -1
- package/dist/core/LoopDriver.js +4 -5
- package/dist/core/LoopDriver.js.map +1 -1
- package/dist/core/LoopLifecycle.d.ts +2 -0
- package/dist/core/LoopLifecycle.d.ts.map +1 -1
- package/dist/core/LoopLifecycle.js +13 -3
- package/dist/core/LoopLifecycle.js.map +1 -1
- package/dist/core/LoopLifecycle.sql +4 -4
- package/dist/core/LoopOutcome.d.ts.map +1 -1
- package/dist/core/LoopOutcome.js +2 -2
- package/dist/core/LoopOutcome.js.map +1 -1
- package/dist/core/MembershipMaterialization.d.ts.map +1 -1
- package/dist/core/MembershipMaterialization.js +29 -29
- package/dist/core/MembershipMaterialization.js.map +1 -1
- package/dist/core/MessageResources.d.ts +5 -1
- package/dist/core/MessageResources.d.ts.map +1 -1
- package/dist/core/MessageResources.js +12 -0
- package/dist/core/MessageResources.js.map +1 -1
- package/dist/core/MessageResources.sql +8 -0
- package/dist/core/MutationEffects.d.ts +1 -0
- package/dist/core/MutationEffects.d.ts.map +1 -1
- package/dist/core/MutationEffects.js +14 -10
- package/dist/core/MutationEffects.js.map +1 -1
- package/dist/core/OperationHistory.d.ts.map +1 -1
- package/dist/core/OperationHistory.js +4 -3
- package/dist/core/OperationHistory.js.map +1 -1
- package/dist/core/OperatorConfig.d.ts.map +1 -1
- package/dist/core/OperatorConfig.js +3 -2
- package/dist/core/OperatorConfig.js.map +1 -1
- package/dist/core/PacketBuilder.d.ts +1 -1
- package/dist/core/PacketBuilder.d.ts.map +1 -1
- package/dist/core/PacketBuilder.js +7 -5
- package/dist/core/PacketBuilder.js.map +1 -1
- package/dist/core/ProblemLog.d.ts +2 -5
- package/dist/core/ProblemLog.d.ts.map +1 -1
- package/dist/core/ProblemLog.js +2 -3
- package/dist/core/ProblemLog.js.map +1 -1
- package/dist/core/ProposalLifecycle.d.ts +12 -11
- package/dist/core/ProposalLifecycle.d.ts.map +1 -1
- package/dist/core/ProposalLifecycle.js +92 -84
- package/dist/core/ProposalLifecycle.js.map +1 -1
- package/dist/core/ReasoningEvent.d.ts +2 -0
- package/dist/core/ReasoningEvent.d.ts.map +1 -1
- package/dist/core/ReplyMetadata.d.ts.map +1 -1
- package/dist/core/ReplyMetadata.js +4 -3
- package/dist/core/ReplyMetadata.js.map +1 -1
- package/dist/core/ResourceBindings.d.ts +2 -2
- package/dist/core/ResourceBindings.d.ts.map +1 -1
- package/dist/core/ResourceBindings.js.map +1 -1
- package/dist/core/ResourceMutations.d.ts +1 -1
- package/dist/core/ResourceMutations.d.ts.map +1 -1
- package/dist/core/ResourceMutations.js +1 -2
- package/dist/core/ResourceMutations.js.map +1 -1
- package/dist/core/ResourceSelector.js +2 -2
- package/dist/core/ResourceSelector.js.map +1 -1
- package/dist/core/ResourceTransfers.d.ts.map +1 -1
- package/dist/core/ResourceTransfers.js +162 -120
- package/dist/core/ResourceTransfers.js.map +1 -1
- package/dist/core/SchemeRegistry.d.ts +6 -5
- package/dist/core/SchemeRegistry.d.ts.map +1 -1
- package/dist/core/SchemeRegistry.js +32 -26
- package/dist/core/SchemeRegistry.js.map +1 -1
- package/dist/core/ServiceHelp.d.ts.map +1 -1
- package/dist/core/ServiceHelp.js +2 -1
- package/dist/core/ServiceHelp.js.map +1 -1
- package/dist/core/StoredPacket.d.ts.map +1 -1
- package/dist/core/StoredPacket.js +26 -19
- package/dist/core/StoredPacket.js.map +1 -1
- package/dist/core/StrikeRail.d.ts +1 -2
- package/dist/core/StrikeRail.d.ts.map +1 -1
- package/dist/core/StrikeRail.js +4 -4
- package/dist/core/StrikeRail.js.map +1 -1
- package/dist/core/TerminalResult.d.ts +0 -2
- package/dist/core/TerminalResult.d.ts.map +1 -1
- package/dist/core/TerminalResult.js +0 -18
- package/dist/core/TerminalResult.js.map +1 -1
- package/dist/core/ToolInputSchema.d.ts.map +1 -1
- package/dist/core/ToolInputSchema.js +2 -2
- package/dist/core/ToolInputSchema.js.map +1 -1
- package/dist/core/ToolResources.d.ts +1 -0
- package/dist/core/ToolResources.d.ts.map +1 -1
- package/dist/core/ToolResources.js +7 -6
- package/dist/core/ToolResources.js.map +1 -1
- package/dist/core/TurnDispositionHandler.d.ts +1 -1
- package/dist/core/TurnDispositionHandler.d.ts.map +1 -1
- package/dist/core/TurnDispositionHandler.js +0 -1
- package/dist/core/TurnDispositionHandler.js.map +1 -1
- package/dist/core/TurnMaterialization.d.ts.map +1 -1
- package/dist/core/TurnMaterialization.js +3 -2
- package/dist/core/TurnMaterialization.js.map +1 -1
- package/dist/core/TurnRunner.d.ts +13 -12
- package/dist/core/TurnRunner.d.ts.map +1 -1
- package/dist/core/TurnRunner.js +174 -164
- package/dist/core/TurnRunner.js.map +1 -1
- package/dist/core/TurnRunner.sql +3 -3
- package/dist/core/WorkerOwners.js.map +1 -1
- package/dist/core/caps/DbEntryCaps.js.map +1 -1
- package/dist/core/caps/DbMessageCaps.d.ts +3 -3
- package/dist/core/caps/DbMessageCaps.d.ts.map +1 -1
- package/dist/core/caps/DbProjectionCaps.js +1 -1
- package/dist/core/caps/DbProjectionCaps.js.map +1 -1
- package/dist/core/caps/DbSubscriptionCaps.d.ts.map +1 -1
- package/dist/core/caps/DbSubscriptionCaps.js +1 -0
- package/dist/core/caps/DbSubscriptionCaps.js.map +1 -1
- package/dist/core/caps/SchemeCtxImpl.d.ts.map +1 -1
- package/dist/core/caps/SchemeCtxImpl.js +4 -1
- package/dist/core/caps/SchemeCtxImpl.js.map +1 -1
- package/dist/core/env-catalog.js.map +1 -1
- package/dist/core/env-defaults.d.ts.map +1 -1
- package/dist/core/env-defaults.js +5 -3
- package/dist/core/env-defaults.js.map +1 -1
- package/dist/core/file-creation-policy.d.ts.map +1 -1
- package/dist/core/file-creation-policy.js +2 -1
- package/dist/core/file-creation-policy.js.map +1 -1
- package/dist/core/file-materialization.d.ts.map +1 -1
- package/dist/core/file-materialization.js +9 -11
- package/dist/core/file-materialization.js.map +1 -1
- package/dist/core/git-env.d.ts +1 -0
- package/dist/core/git-env.d.ts.map +1 -1
- package/dist/core/git-env.js +34 -3
- package/dist/core/git-env.js.map +1 -1
- package/dist/core/git-membership.d.ts +5 -0
- package/dist/core/git-membership.d.ts.map +1 -1
- package/dist/core/git-membership.js +55 -21
- package/dist/core/git-membership.js.map +1 -1
- package/dist/core/git-state.d.ts.map +1 -1
- package/dist/core/git-state.js +1 -0
- package/dist/core/git-state.js.map +1 -1
- package/dist/core/packet-wire.d.ts +26 -21
- package/dist/core/packet-wire.d.ts.map +1 -1
- package/dist/core/packet-wire.js +150 -112
- package/dist/core/packet-wire.js.map +1 -1
- package/dist/core/results.d.ts +9 -4
- package/dist/core/results.d.ts.map +1 -1
- package/dist/core/results.js +14 -1
- package/dist/core/results.js.map +1 -1
- package/dist/core/runtime-floor.d.ts +8 -0
- package/dist/core/runtime-floor.d.ts.map +1 -0
- package/dist/core/runtime-floor.js +40 -0
- package/dist/core/runtime-floor.js.map +1 -0
- package/dist/core/runtime-guard.d.ts +2 -0
- package/dist/core/runtime-guard.d.ts.map +1 -0
- package/dist/core/runtime-guard.js +5 -0
- package/dist/core/runtime-guard.js.map +1 -0
- package/dist/core/sqlite-synchronous.d.ts +1 -1
- package/dist/core/sqlite-synchronous.d.ts.map +1 -1
- package/dist/core/sqlite-synchronous.js.map +1 -1
- package/dist/core/statement-primary.d.ts +2 -2
- package/dist/core/statement-primary.d.ts.map +1 -1
- package/dist/core/statement-primary.js.map +1 -1
- package/dist/core/workspace-settings.js +1 -1
- package/dist/core/workspace-settings.js.map +1 -1
- package/dist/evidence/EvidenceReader.d.ts.map +1 -1
- package/dist/evidence/EvidenceReader.js +20 -6
- package/dist/evidence/EvidenceReader.js.map +1 -1
- package/dist/launch/Launch.d.ts +1 -0
- package/dist/launch/Launch.d.ts.map +1 -1
- package/dist/launch/Launch.js +28 -12
- package/dist/launch/Launch.js.map +1 -1
- package/dist/man/plurnk-service.1 +6 -2
- package/dist/schemes/EffectPolicy.js +1 -1
- package/dist/schemes/EffectPolicy.js.map +1 -1
- package/dist/schemes/Env.d.ts +1 -1
- package/dist/schemes/Env.d.ts.map +1 -1
- package/dist/schemes/Env.js +7 -1
- package/dist/schemes/Env.js.map +1 -1
- package/dist/schemes/Exec.d.ts +10 -12
- package/dist/schemes/Exec.d.ts.map +1 -1
- package/dist/schemes/Exec.js +337 -437
- package/dist/schemes/Exec.js.map +1 -1
- package/dist/schemes/ExecOutputScheme.d.ts +4 -6
- package/dist/schemes/ExecOutputScheme.d.ts.map +1 -1
- package/dist/schemes/ExecOutputScheme.js +17 -17
- package/dist/schemes/ExecOutputScheme.js.map +1 -1
- package/dist/schemes/ExecScheduler.d.ts.map +1 -1
- package/dist/schemes/ExecScheduler.js +1 -2
- package/dist/schemes/ExecScheduler.js.map +1 -1
- package/dist/schemes/ExecutionInput.js +3 -3
- package/dist/schemes/ExecutionInput.js.map +1 -1
- package/dist/schemes/File.d.ts +3 -18
- package/dist/schemes/File.d.ts.map +1 -1
- package/dist/schemes/File.js +136 -79
- package/dist/schemes/File.js.map +1 -1
- package/dist/schemes/Log.d.ts.map +1 -1
- package/dist/schemes/Log.js +193 -161
- package/dist/schemes/Log.js.map +1 -1
- package/dist/schemes/QuestionTool.d.ts.map +1 -1
- package/dist/schemes/QuestionTool.js +6 -8
- package/dist/schemes/QuestionTool.js.map +1 -1
- package/dist/schemes/ResourceTreeScheme.d.ts.map +1 -1
- package/dist/schemes/ResourceTreeScheme.js +2 -2
- package/dist/schemes/ResourceTreeScheme.js.map +1 -1
- package/dist/schemes/TurnSource.js +3 -3
- package/dist/schemes/TurnSource.js.map +1 -1
- package/dist/schemes/Worker.js.map +1 -1
- package/dist/schemes/_entry-crud.d.ts.map +1 -1
- package/dist/schemes/_entry-crud.js +4 -2
- package/dist/schemes/_entry-crud.js.map +1 -1
- package/dist/schemes/_entry-find.d.ts.map +1 -1
- package/dist/schemes/_entry-find.js +187 -139
- package/dist/schemes/_entry-find.js.map +1 -1
- package/dist/schemes/_entry-manifest.js +1 -1
- package/dist/schemes/_entry-manifest.js.map +1 -1
- package/dist/schemes/_entry-ops.js.map +1 -1
- package/dist/schemes/_search-index.js.map +1 -1
- package/dist/schemes/exec-entry-sink.d.ts +30 -0
- package/dist/schemes/exec-entry-sink.d.ts.map +1 -0
- package/dist/schemes/exec-entry-sink.js +238 -0
- package/dist/schemes/exec-entry-sink.js.map +1 -0
- package/dist/schemes/exec-lifetime.d.ts.map +1 -1
- package/dist/schemes/exec-lifetime.js +5 -2
- package/dist/schemes/exec-lifetime.js.map +1 -1
- package/dist/server/ClientOperations.d.ts +45 -0
- package/dist/server/ClientOperations.d.ts.map +1 -0
- package/dist/server/ClientOperations.js +192 -0
- package/dist/server/ClientOperations.js.map +1 -0
- package/dist/server/ClientReads.d.ts +13 -5
- package/dist/server/ClientReads.d.ts.map +1 -1
- package/dist/server/ClientReads.js +108 -21
- package/dist/server/ClientReads.js.map +1 -1
- package/dist/server/Credentials.js +2 -2
- package/dist/server/Credentials.js.map +1 -1
- package/dist/server/Daemon.d.ts +40 -28
- package/dist/server/Daemon.d.ts.map +1 -1
- package/dist/server/Daemon.js +250 -839
- package/dist/server/Daemon.js.map +1 -1
- package/dist/server/DaemonLock.d.ts +2 -0
- package/dist/server/DaemonLock.d.ts.map +1 -1
- package/dist/server/DaemonLock.js +10 -1
- package/dist/server/DaemonLock.js.map +1 -1
- package/dist/server/DaemonModules.d.ts +39 -0
- package/dist/server/DaemonModules.d.ts.map +1 -0
- package/dist/server/DaemonModules.js +219 -0
- package/dist/server/DaemonModules.js.map +1 -0
- package/dist/server/DrainSupervisor.d.ts +4 -2
- package/dist/server/DrainSupervisor.d.ts.map +1 -1
- package/dist/server/DrainSupervisor.js +318 -290
- package/dist/server/DrainSupervisor.js.map +1 -1
- package/dist/server/EnvFunctionality.d.ts +10 -7
- package/dist/server/EnvFunctionality.d.ts.map +1 -1
- package/dist/server/EnvFunctionality.js +6 -5
- package/dist/server/EnvFunctionality.js.map +1 -1
- package/dist/server/Functionality.d.ts +4 -5
- package/dist/server/Functionality.d.ts.map +1 -1
- package/dist/server/Functionality.js +19 -15
- package/dist/server/Functionality.js.map +1 -1
- package/dist/server/HttpListener.d.ts.map +1 -1
- package/dist/server/HttpListener.js +28 -8
- package/dist/server/HttpListener.js.map +1 -1
- package/dist/server/MembersFunctionality.d.ts +19 -7
- package/dist/server/MembersFunctionality.d.ts.map +1 -1
- package/dist/server/MembersFunctionality.js +30 -16
- package/dist/server/MembersFunctionality.js.map +1 -1
- package/dist/server/MessageDelivery.d.ts +43 -0
- package/dist/server/MessageDelivery.d.ts.map +1 -0
- package/dist/server/MessageDelivery.js +186 -0
- package/dist/server/MessageDelivery.js.map +1 -0
- package/dist/server/ModuleHost.d.ts +3 -3
- package/dist/server/ModuleHost.d.ts.map +1 -1
- package/dist/server/Places.d.ts +19 -0
- package/dist/server/Places.d.ts.map +1 -0
- package/dist/server/Places.js +76 -0
- package/dist/server/Places.js.map +1 -0
- package/dist/server/PluginSources.d.ts.map +1 -1
- package/dist/server/PluginSources.js +2 -1
- package/dist/server/PluginSources.js.map +1 -1
- package/dist/server/PlurnkSkill.d.ts.map +1 -1
- package/dist/server/PlurnkSkill.js +5 -4
- package/dist/server/PlurnkSkill.js.map +1 -1
- package/dist/server/Rollback.d.ts.map +1 -1
- package/dist/server/Rollback.js +2 -1
- package/dist/server/Rollback.js.map +1 -1
- package/dist/server/WorkerModels.d.ts +83 -0
- package/dist/server/WorkerModels.d.ts.map +1 -0
- package/dist/server/WorkerModels.js +500 -0
- package/dist/server/WorkerModels.js.map +1 -0
- package/dist/server/WorkerOverview.d.ts +22 -0
- package/dist/server/WorkerOverview.d.ts.map +1 -0
- package/dist/server/WorkerOverview.js +42 -0
- package/dist/server/WorkerOverview.js.map +1 -0
- package/dist/server/WorkspacePlugins.d.ts +1 -1
- package/dist/server/WorkspacePlugins.d.ts.map +1 -1
- package/dist/server/WorkspacePlugins.js +0 -1
- package/dist/server/WorkspacePlugins.js.map +1 -1
- package/dist/server/WorkspaceResidency.d.ts +3 -3
- package/dist/server/WorkspaceResidency.d.ts.map +1 -1
- package/dist/server/WorkspaceResidency.js.map +1 -1
- package/dist/server/client-input.d.ts +2 -2
- package/dist/server/client-input.d.ts.map +1 -1
- package/dist/server/client-input.js +19 -12
- package/dist/server/client-input.js.map +1 -1
- package/dist/server/envelope.d.ts +4 -1
- package/dist/server/envelope.d.ts.map +1 -1
- package/dist/server/envelope.js +7 -3
- package/dist/server/envelope.js.map +1 -1
- package/dist/server/envelope.sql +10 -6
- package/dist/server/logEntry.d.ts +38 -1
- package/dist/server/logEntry.d.ts.map +1 -1
- package/dist/server/logEntry.js +9 -9
- package/dist/server/logEntry.js.map +1 -1
- package/dist/server/logEntry.sql +4 -2
- package/dist/server/loopDocs.d.ts.map +1 -1
- package/dist/server/loopDocs.js +11 -2
- package/dist/server/loopDocs.js.map +1 -1
- package/dist/server/module-discovery.d.ts +2 -3
- package/dist/server/module-discovery.d.ts.map +1 -1
- package/dist/server/module-discovery.js +6 -6
- package/dist/server/module-discovery.js.map +1 -1
- package/dist/server/places.sql +83 -0
- package/dist/server/seam-loop.sql +8 -0
- package/dist/server/worker-overview.sql +50 -0
- package/dist/service.d.ts +1 -0
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +35 -9
- package/dist/service.js.map +1 -1
- package/docs/members.md +11 -21
- package/migrations/033_hidden_places.sql +10 -0
- package/package.json +48 -57
- package/dist/observe/init.d.ts +0 -8
- package/dist/observe/init.d.ts.map +0 -1
- package/dist/observe/init.js +0 -163
- package/dist/observe/init.js.map +0 -1
- package/dist/server/WorkerModelResolver.d.ts +0 -20
- package/dist/server/WorkerModelResolver.d.ts.map +0 -1
- package/dist/server/WorkerModelResolver.js +0 -200
- package/dist/server/WorkerModelResolver.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TurnRunner.d.ts","sourceRoot":"","sources":["../../src/core/TurnRunner.ts"],"names":[],"mappings":"AAGA,OAAO,EAAc,gBAAgB,
|
|
1
|
+
{"version":3,"file":"TurnRunner.d.ts","sourceRoot":"","sources":["../../src/core/TurnRunner.ts"],"names":[],"mappings":"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"}
|
package/dist/core/TurnRunner.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
+
import StoredPacket, {} from "./StoredPacket.js";
|
|
1
2
|
import NativeContent from "./NativeContent.js";
|
|
2
3
|
import { PlurnkParser, parsePath } from "@plurnk/plurnk-parser";
|
|
3
|
-
import { PathSyntax, PlurnkParseError, UNKNOWN_POSITION } from "@plurnk/plurnk-contracts";
|
|
4
|
+
import { PathSyntax, PlurnkParseError, UNKNOWN_POSITION, Validator } from "@plurnk/plurnk-contracts";
|
|
4
5
|
import WorkerOwners from "./WorkerOwners.js";
|
|
5
6
|
import { setTimeout as delay } from "node:timers/promises";
|
|
6
|
-
import { aggregateProviderAccounting } from "@plurnk/plurnk-providers";
|
|
7
|
+
import { aggregateProviderAccounting, ProviderError, scopeEnvToAlias, } from "@plurnk/plurnk-providers";
|
|
7
8
|
const comparePosition = (a, b) => a.line - b.line || a.column - b.column;
|
|
8
|
-
import { Mimetypes } from "@plurnk/plurnk-mimetypes";
|
|
9
9
|
import FabricatedLog from "./FabricatedLog.js";
|
|
10
10
|
import Meta, { Knob } from "@plurnk/plurnk-meta";
|
|
11
11
|
import GitMembership from "./git-membership.js";
|
|
@@ -14,7 +14,6 @@ import GitState, {} from "./git-state.js";
|
|
|
14
14
|
import WorkspaceSettings from "./workspace-settings.js";
|
|
15
15
|
import { generatedPathname } from "./plurnk-uri.js";
|
|
16
16
|
import { contentWeight } from "./content-weight.js";
|
|
17
|
-
import LiveSubscriptions from "./LiveSubscriptions.js";
|
|
18
17
|
import { readFile } from "node:fs/promises";
|
|
19
18
|
import { resolve as resolvePath } from "node:path";
|
|
20
19
|
import { homedir } from "node:os";
|
|
@@ -31,16 +30,9 @@ import PacketWire from "./packet-wire.js";
|
|
|
31
30
|
import { RECEIPT_RESERVE, reserved } from "./ContextFit.js";
|
|
32
31
|
import Results, { OperationFailureError } from "./results.js";
|
|
33
32
|
import Turn, {} from "./Turn.js";
|
|
34
|
-
// TurnRunner owns one inference cycle and any initialization turn
|
|
35
|
-
// that precedes provider admission; Engine retains the surrounding loop
|
|
36
|
-
// lifecycle and public facade.
|
|
37
|
-
import NoticeChannel from "./NoticeChannel.js";
|
|
38
33
|
import ProviderRecovery from "./ProviderRecovery.js";
|
|
39
|
-
import
|
|
40
|
-
import
|
|
41
|
-
import PacketBuilder, {} from "./PacketBuilder.js";
|
|
42
|
-
import StoredPacket, {} from "./StoredPacket.js";
|
|
43
|
-
import Dispatcher from "./Dispatcher.js";
|
|
34
|
+
import {} from "./StrikeRail.js";
|
|
35
|
+
import {} from "./PacketBuilder.js";
|
|
44
36
|
import { observed, observedSync } from "../observe/spans.js";
|
|
45
37
|
import { genAiRequestName, genAiRequestOptions, settleGenAiResponse } from "../observe/genai.js";
|
|
46
38
|
import { PROVIDER_CALLS, recordCounter } from "../observe/metrics.js";
|
|
@@ -65,7 +57,7 @@ const workerCatalogTarget = (namespace) => {
|
|
|
65
57
|
};
|
|
66
58
|
};
|
|
67
59
|
const assertOpenPaths = (value, source) => {
|
|
68
|
-
if (!Array.isArray(value) || value.
|
|
60
|
+
if (!Array.isArray(value) || !value.every((path) => typeof path === "string" && path.length > 0)) {
|
|
69
61
|
throw new TypeError(`${source}: expected an array of non-empty strings`);
|
|
70
62
|
}
|
|
71
63
|
return value;
|
|
@@ -93,11 +85,11 @@ const readFilesItems = () => {
|
|
|
93
85
|
return null;
|
|
94
86
|
return normalizeFilesItems(Number.parseInt(raw, 10));
|
|
95
87
|
};
|
|
96
|
-
|
|
88
|
+
// Provider contract owned by @plurnk/plurnk-providers; engine is the consumer.
|
|
97
89
|
import ProviderInstantiate from "./ProviderInstantiate.js";
|
|
98
90
|
import TurnMaterialization from "./TurnMaterialization.js";
|
|
99
91
|
import BareBatchRunner from "./BareBatchRunner.js";
|
|
100
|
-
import {
|
|
92
|
+
import { TURN_STATUS_IMPLICIT_CONTINUE, outputAllowance } from "./turn-signals.js";
|
|
101
93
|
import AdmittedTurnExecutor from "./AdmittedTurnExecutor.js";
|
|
102
94
|
// {§context-wall} — the window's one terminal: the packet cannot fit the model's window even as receipts.
|
|
103
95
|
const WINDOW_OVERFLOW_DETAIL = "Context window overflow: the packet cannot fit the model's window even as receipts.";
|
|
@@ -110,16 +102,12 @@ const OVER_BUDGET_DETAIL = "Context exceeds budget. YOU MUST ONLY KILL, MOVE or
|
|
|
110
102
|
// labelled as the card's own plan example is: the worker's plan in steps, then its next step.
|
|
111
103
|
const INITIALIZATION_NOTE = {
|
|
112
104
|
op: "NOTE", aside: "plan", metadata: null, target: null, lineMarker: null,
|
|
113
|
-
body: [
|
|
114
|
-
"1. Survey the tooling, documentation, extended context, and project root: what exists decides what can be done.",
|
|
115
|
-
"2. Read the Open Message and restate what it asks for and what will show it is done.",
|
|
116
|
-
"3. Do the work, saving all new facts, ideas, and plans in NOTEs for later turns.",
|
|
117
|
-
].join("\n"),
|
|
105
|
+
body: ["1. Survey the environment.", "2. Evaluate and react to the Open Message."].join("\n"),
|
|
118
106
|
position: UNKNOWN_POSITION,
|
|
119
107
|
};
|
|
120
108
|
const INITIALIZATION_CLOSING_NOTE = {
|
|
121
109
|
op: "NOTE", aside: "plan", metadata: null, target: null, lineMarker: null,
|
|
122
|
-
body: "
|
|
110
|
+
body: "Evaluate and react to the Open Message.", position: UNKNOWN_POSITION,
|
|
123
111
|
};
|
|
124
112
|
// {§continued-without-note} — said once, in the next packet, of a continuing turn that carried no NOTE.
|
|
125
113
|
const CONTINUED_WITHOUT_NOTE = "The turn continued without a NOTE.";
|
|
@@ -168,7 +156,6 @@ export default class TurnRunner {
|
|
|
168
156
|
#weighContent;
|
|
169
157
|
#notices;
|
|
170
158
|
#problems;
|
|
171
|
-
#strikes;
|
|
172
159
|
#packets;
|
|
173
160
|
#dispatcher;
|
|
174
161
|
#liveSubscriptions;
|
|
@@ -180,19 +167,19 @@ export default class TurnRunner {
|
|
|
180
167
|
#warmWorkspace;
|
|
181
168
|
#dispatch;
|
|
182
169
|
#resolveWorkerProviderIdentity;
|
|
170
|
+
#loopGauge;
|
|
183
171
|
// {§operator-grammar} — one read per path per daemon; the file is the operator's and static.
|
|
184
172
|
#grammarCache = new Map();
|
|
185
173
|
#materialization;
|
|
186
174
|
#bareBatch;
|
|
187
175
|
#admitted;
|
|
188
|
-
constructor({ db, schemes, mimetypes, weigh, notices, problems,
|
|
176
|
+
constructor({ db, schemes, mimetypes, weigh, notices, problems, packets, dispatcher, liveSubscriptions, notify, executors, loopSignal, interactions, warmWorkspace, dispatch, resolveWorkerProviderIdentity, loopGauge, }) {
|
|
189
177
|
this.#db = db;
|
|
190
178
|
this.#schemes = schemes;
|
|
191
179
|
this.#mimetypes = mimetypes;
|
|
192
180
|
this.#weighContent = weigh;
|
|
193
181
|
this.#notices = notices;
|
|
194
182
|
this.#problems = problems;
|
|
195
|
-
this.#strikes = strikes;
|
|
196
183
|
this.#packets = packets;
|
|
197
184
|
this.#dispatcher = dispatcher;
|
|
198
185
|
this.#liveSubscriptions = liveSubscriptions;
|
|
@@ -204,6 +191,7 @@ export default class TurnRunner {
|
|
|
204
191
|
this.#warmWorkspace = warmWorkspace;
|
|
205
192
|
this.#dispatch = dispatch;
|
|
206
193
|
this.#resolveWorkerProviderIdentity = resolveWorkerProviderIdentity;
|
|
194
|
+
this.#loopGauge = loopGauge;
|
|
207
195
|
this.#materialization = new TurnMaterialization({ db: this.#db, weighContent: this.#weighContent, mimetypes: this.#mimetypes });
|
|
208
196
|
this.#bareBatch = new BareBatchRunner({ db: this.#db, providerAttributions: this.#providerAttributions.bind(this), providerFailure: TurnRunner.#providerFailure });
|
|
209
197
|
this.#admitted = new AdmittedTurnExecutor({ db: this.#db, schemes: this.#schemes, notices: this.#notices, problems: this.#problems, dispatcher: this.#dispatcher, bareBatch: this.#bareBatch });
|
|
@@ -215,10 +203,14 @@ export default class TurnRunner {
|
|
|
215
203
|
const packetCount = await this.#db.engine_loop_packet_count.get({ loop_id: args.loopId });
|
|
216
204
|
if (packetCount === undefined)
|
|
217
205
|
throw new Error(`loop ${args.loopId}: packet count row missing`);
|
|
206
|
+
// {§tokenomics-client-gauge} The turn's inference is recorded: its packet and its call are the gauge now.
|
|
207
|
+
const gauge = await this.#loopGauge(args.loopId);
|
|
218
208
|
this.#notify.loopPacketNotify(args.workspaceId, {
|
|
219
209
|
workerId: args.workerId,
|
|
220
210
|
loopId: args.loopId,
|
|
211
|
+
loopSeq: packetCount.sequence,
|
|
221
212
|
packetCount: packetCount.count,
|
|
213
|
+
gauge,
|
|
222
214
|
});
|
|
223
215
|
}
|
|
224
216
|
// {§operator-grammar} — the operator's grammar text for this provider, or undefined when
|
|
@@ -417,28 +409,26 @@ export default class TurnRunner {
|
|
|
417
409
|
const initializationStatements = [];
|
|
418
410
|
// {§worker-initialization-entry} — the worker's first turn is the worked
|
|
419
411
|
// example itself: the actual orienting operations.
|
|
420
|
-
// {§turn0-agents-stunt} — the project AGENTS.md
|
|
421
|
-
// worker:///_plurnk/
|
|
422
|
-
//
|
|
423
|
-
// stays in the system prompt; nothing else is force-read.
|
|
412
|
+
// {§turn0-agents-stunt} {§turn0-local-instructions} — the project AGENTS.md, then its AGENTS.local.md (materialized
|
|
413
|
+
// by LoopDocs under worker:///_plurnk/), each get one foisted READ on the worker's first loop, so local repo
|
|
414
|
+
// guidance is visible turn-0 content. Global policy stays in the system prompt; nothing else is force-read.
|
|
424
415
|
if (initializationTurn !== null) {
|
|
425
|
-
const
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
const
|
|
433
|
-
kind: "url", raw:
|
|
416
|
+
for (const name of ["/AGENTS.md", "/AGENTS.local.md"]) {
|
|
417
|
+
const pathname = generatedPathname(name);
|
|
418
|
+
const entry = await this.#db.crud_find_workspace_entry.get({
|
|
419
|
+
workspace_id: workspaceId, scheme: "worker", authority: "", pathname,
|
|
420
|
+
});
|
|
421
|
+
if (entry === undefined)
|
|
422
|
+
continue;
|
|
423
|
+
const target = {
|
|
424
|
+
kind: "url", raw: `worker://${pathname}`, scheme: "worker",
|
|
434
425
|
username: null, password: null, hostname: null, port: null,
|
|
435
|
-
pathname
|
|
426
|
+
pathname, query: null, fragment: null,
|
|
436
427
|
};
|
|
437
|
-
|
|
438
|
-
op: "READ", aside: null, target
|
|
428
|
+
initializationStatements.push({
|
|
429
|
+
op: "READ", aside: null, target,
|
|
439
430
|
metadata: null, lineMarker: null, matcher: null, body: null, position: UNKNOWN_POSITION,
|
|
440
|
-
};
|
|
441
|
-
initializationStatements.push(agentsRead);
|
|
431
|
+
});
|
|
442
432
|
}
|
|
443
433
|
}
|
|
444
434
|
return {
|
|
@@ -513,7 +503,17 @@ export default class TurnRunner {
|
|
|
513
503
|
// {§emission-row} — a `_plurnk` turn has receipts, never a fabricated assistant emission.
|
|
514
504
|
// {§message-arrival} — the message reaches the model as an inbound SEND in the first
|
|
515
505
|
// model turn; initialization does not READ it a second time.
|
|
516
|
-
const admittedInitializationStatements =
|
|
506
|
+
const admittedInitializationStatements = [];
|
|
507
|
+
for (const statement of initializationStatements) {
|
|
508
|
+
if (!this.#capabilities.allowsAcross(statement, workspaceId, initializationPolicies))
|
|
509
|
+
continue;
|
|
510
|
+
// {§actor-boundary-catalog-preview} — a survey that would select nothing is left out of the program.
|
|
511
|
+
if (statement.op === "FIND" && !await this.#dispatcher.selects(statement, {
|
|
512
|
+
workspaceId, workerId, loopId, turnId: initializationTurn.id, origin: "_plurnk",
|
|
513
|
+
}))
|
|
514
|
+
continue;
|
|
515
|
+
admittedInitializationStatements.push(statement);
|
|
516
|
+
}
|
|
517
517
|
if (admittedInitializationStatements.length === 0) {
|
|
518
518
|
// Nothing to survey (the preview off, no project guidance): the turn opens and completes empty.
|
|
519
519
|
await Turn.complete(this.#db, initializationTurn.id, 200);
|
|
@@ -553,18 +553,11 @@ export default class TurnRunner {
|
|
|
553
553
|
// {§actor-boundary-catalog-preview} — the opening surveys, each admitted only when
|
|
554
554
|
// its scheme is registered for the workspace. A positive filesItems caps the
|
|
555
555
|
// project rows.
|
|
556
|
-
async #catalogSurveys({ workspaceId }, { workerName, initializationPolicies
|
|
556
|
+
async #catalogSurveys({ workspaceId }, { workerName, initializationPolicies }, filesItems) {
|
|
557
557
|
const catalogSchemes = await this.#db.engine_scheme_catalog_summary.all({ workspace_id: workspaceId });
|
|
558
558
|
const fileItems = catalogSchemes.find(({ scheme }) => scheme === "file")?.shallow_items ?? 0;
|
|
559
559
|
const fileCap = filesItems > 0 && fileItems > 0 ? Math.min(filesItems, fileItems) : null;
|
|
560
560
|
const surveys = [
|
|
561
|
-
{
|
|
562
|
-
// Trial (#1073): the survey reads its own program, so the log carries one program verbatim
|
|
563
|
-
// and shows that every ops:// turn is readable.
|
|
564
|
-
op: "READ", aside: "this program",
|
|
565
|
-
target: { kind: "url", raw: `ops://${workerName}/${loopSequence}/1`, scheme: "ops", username: null, password: null, hostname: workerName, port: null, pathname: `/${loopSequence}/1`, query: null, fragment: null },
|
|
566
|
-
metadata: null, lineMarker: null, matcher: null, body: null, position: UNKNOWN_POSITION,
|
|
567
|
-
},
|
|
568
561
|
{
|
|
569
562
|
op: "FIND", aside: null,
|
|
570
563
|
target: { kind: "url", raw: "skill://*/SKILL.md", scheme: "skill", username: null, password: null, hostname: "*", port: null, pathname: "/SKILL.md", query: null, fragment: null },
|
|
@@ -913,9 +906,8 @@ export default class TurnRunner {
|
|
|
913
906
|
attempts.railGrammar = await this.#operatorGrammar(provider);
|
|
914
907
|
attempts.wellFormed = await this.#bodyChecks(workspaceId);
|
|
915
908
|
const attemptLimit = readEmissionAttempts();
|
|
916
|
-
const strikeStreak = await this.#strikes.streak(loopId);
|
|
917
909
|
for (let attempt = 1; attempt <= attemptLimit;) {
|
|
918
|
-
const verdict = await this.#issueProviderCall(args, request, attempts, attempt
|
|
910
|
+
const verdict = await this.#issueProviderCall(args, request, attempts, attempt);
|
|
919
911
|
if (verdict === "admitted")
|
|
920
912
|
break;
|
|
921
913
|
if (verdict === "rejected")
|
|
@@ -966,7 +958,7 @@ export default class TurnRunner {
|
|
|
966
958
|
// under the reasoning observer, and its classification. {§provider-recovery}
|
|
967
959
|
// re-issues the same emission attempt; the parser's admission is the one verdict
|
|
968
960
|
// on a completed exchange.
|
|
969
|
-
async #issueProviderCall(args, request, attempts, attempt
|
|
961
|
+
async #issueProviderCall(args, request, attempts, attempt) {
|
|
970
962
|
const { provider, workspaceId, workerId, loopId } = args;
|
|
971
963
|
// A recovery re-issue does not consume a grammar-emission attempt. Every
|
|
972
964
|
// logical provider call still receives its own durable sequence and accounting.
|
|
@@ -996,10 +988,10 @@ export default class TurnRunner {
|
|
|
996
988
|
}
|
|
997
989
|
attempts.attemptId = attemptRow.id;
|
|
998
990
|
attempts.callInFlight = true;
|
|
999
|
-
const reasoning = this.#reasoningObserver(args, request
|
|
991
|
+
const reasoning = this.#reasoningObserver(args, request, modelCall);
|
|
1000
992
|
let completedResponse;
|
|
1001
993
|
try {
|
|
1002
|
-
completedResponse = await this.#generate(args, request, attempts, modelCall, reasoning
|
|
994
|
+
completedResponse = await this.#generate(args, request, attempts, modelCall, reasoning);
|
|
1003
995
|
}
|
|
1004
996
|
catch (error) {
|
|
1005
997
|
if (error instanceof ProviderError
|
|
@@ -1037,7 +1029,7 @@ export default class TurnRunner {
|
|
|
1037
1029
|
// {§notifications-reasoning-event} — only the parent emission is observed;
|
|
1038
1030
|
// BARE has no observer on its isolated calls. Reasoning deltas cite the physical
|
|
1039
1031
|
// request they stream in; a new request or the call's end closes the open span.
|
|
1040
|
-
#reasoningObserver({ workspaceId, workerId, loopId }, turnId, modelCall) {
|
|
1032
|
+
#reasoningObserver({ workspaceId, workerId, loopId }, { turnId, loopSeq, seq: turnSeq }, modelCall) {
|
|
1041
1033
|
let reasoningStarted = false;
|
|
1042
1034
|
let reasoningRequestSequence = 0;
|
|
1043
1035
|
const end = () => {
|
|
@@ -1047,6 +1039,8 @@ export default class TurnRunner {
|
|
|
1047
1039
|
workerId,
|
|
1048
1040
|
loopId,
|
|
1049
1041
|
turnId,
|
|
1042
|
+
loopSeq,
|
|
1043
|
+
turnSeq,
|
|
1050
1044
|
modelCallId: modelCall.id,
|
|
1051
1045
|
requestSequence: reasoningRequestSequence,
|
|
1052
1046
|
phase: "end",
|
|
@@ -1071,6 +1065,8 @@ export default class TurnRunner {
|
|
|
1071
1065
|
workerId,
|
|
1072
1066
|
loopId,
|
|
1073
1067
|
turnId,
|
|
1068
|
+
loopSeq,
|
|
1069
|
+
turnSeq,
|
|
1074
1070
|
modelCallId: modelCall.id,
|
|
1075
1071
|
requestSequence: reasoningRequestSequence,
|
|
1076
1072
|
phase: "start",
|
|
@@ -1080,6 +1076,8 @@ export default class TurnRunner {
|
|
|
1080
1076
|
workerId,
|
|
1081
1077
|
loopId,
|
|
1082
1078
|
turnId,
|
|
1079
|
+
loopSeq,
|
|
1080
|
+
turnSeq,
|
|
1083
1081
|
modelCallId: modelCall.id,
|
|
1084
1082
|
requestSequence: reasoningRequestSequence,
|
|
1085
1083
|
phase: "content",
|
|
@@ -1091,7 +1089,7 @@ export default class TurnRunner {
|
|
|
1091
1089
|
// The exchange under its GenAI span: the packet's observations are recorded, the
|
|
1092
1090
|
// provider generates against the wire request, and the call's accounting is
|
|
1093
1091
|
// asserted whether it resolved or failed.
|
|
1094
|
-
async #generate({ provider, workspaceId }, request, attempts, modelCall, reasoning
|
|
1092
|
+
async #generate({ provider, workspaceId }, request, attempts, modelCall, reasoning) {
|
|
1095
1093
|
return await observed(// {§observability-boundary}
|
|
1096
1094
|
genAiRequestName(provider.model), { model: provider.model, attempt: attempts.modelCallSequence }, async (span) => {
|
|
1097
1095
|
try {
|
|
@@ -1413,7 +1411,7 @@ export default class TurnRunner {
|
|
|
1413
1411
|
model: callMetadata.model,
|
|
1414
1412
|
// Opaque provider metadata plus the grammar transport key.
|
|
1415
1413
|
// {§meta-passthrough}, {§operator-grammar}
|
|
1416
|
-
meta: JSON.stringify({ ...
|
|
1414
|
+
meta: JSON.stringify({ ...response.meta, ...railKeys }),
|
|
1417
1415
|
},
|
|
1418
1416
|
});
|
|
1419
1417
|
}
|
|
@@ -1526,111 +1524,14 @@ export default class TurnRunner {
|
|
|
1526
1524
|
}
|
|
1527
1525
|
#splitResponse(response, executors = [], wellFormed) {
|
|
1528
1526
|
const { assistant } = response;
|
|
1529
|
-
|
|
1530
|
-
const
|
|
1531
|
-
const parseErrors =
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
const fabrications = [];
|
|
1537
|
-
const outside = [];
|
|
1538
|
-
if (preParsedOps !== undefined) {
|
|
1539
|
-
ops.push(...preParsedOps);
|
|
1540
|
-
contentStatementCount = preParsedOps.length;
|
|
1541
|
-
}
|
|
1542
|
-
else {
|
|
1543
|
-
// {§observability-boundary} — the parse is observed without its input;
|
|
1544
|
-
// only the resulting statement count is attributable.
|
|
1545
|
-
const parsed = observedSync("contracts.parse", {}, (span) => {
|
|
1546
|
-
// {§executor-heading}: explicit invocations parse without registration; available names
|
|
1547
|
-
// also admit slotless headings. Dispatch resolves the then-current workspace registry.
|
|
1548
|
-
const result = PlurnkParser.parse(assistant.content, { executors, ...(wellFormed === undefined ? {} : { wellFormed }) });
|
|
1549
|
-
span.setAttribute("statements", result.items.filter((item) => item.kind === "statement").length);
|
|
1550
|
-
return result;
|
|
1551
|
-
});
|
|
1552
|
-
// {§outside-text}: beside a fenced operation, the text between two operations is one NOTE at its
|
|
1553
|
-
// position, annotation the model wrote without its fence; a turn that fenced no operation keeps
|
|
1554
|
-
// its text as its outside source and stays an empty turn ({§empty-turn}). Echoed emission
|
|
1555
|
-
// headings are announcements, not annotation, and are dropped ({§fabricated-log-entry}).
|
|
1556
|
-
const fenced = parsed.items.filter((item) => item.kind === "statement").length;
|
|
1557
|
-
let span = null;
|
|
1558
|
-
const flushSpan = () => {
|
|
1559
|
-
if (span === null)
|
|
1560
|
-
return;
|
|
1561
|
-
const body = span.body.join("\n\n");
|
|
1562
|
-
if (body.length > 0) {
|
|
1563
|
-
if (fenced > 0) {
|
|
1564
|
-
ops.push({ op: "NOTE", aside: null, metadata: null, target: null, lineMarker: null, body, position: span.position });
|
|
1565
|
-
contentStatementCount += 1;
|
|
1566
|
-
}
|
|
1567
|
-
else
|
|
1568
|
-
outside.push(body);
|
|
1569
|
-
}
|
|
1570
|
-
span = null;
|
|
1527
|
+
// A scripted provider's pre-parsed statements, each proven against the statement schema.
|
|
1528
|
+
const preParsedOps = "ops" in assistant && Array.isArray(assistant.ops) ? assistant.ops.map((op) => Validator.assertPlurnkStatement(op)) : undefined;
|
|
1529
|
+
const { ops, contentStatementCount, parseErrors, parseNotices, fabrications, outside, hasUnparsedTail, operationOmitted } = preParsedOps === undefined
|
|
1530
|
+
? TurnRunner.#parseContent(assistant.content, executors, wellFormed)
|
|
1531
|
+
: {
|
|
1532
|
+
ops: [...preParsedOps], contentStatementCount: preParsedOps.length, parseErrors: [], parseNotices: [], fabrications: [],
|
|
1533
|
+
outside: [], hasUnparsedTail: false, operationOmitted: false,
|
|
1571
1534
|
};
|
|
1572
|
-
for (const item of parsed.items) {
|
|
1573
|
-
if (item.kind !== "text")
|
|
1574
|
-
flushSpan();
|
|
1575
|
-
if (item.kind === "statement") {
|
|
1576
|
-
ops.push(item.statement);
|
|
1577
|
-
contentStatementCount += 1;
|
|
1578
|
-
}
|
|
1579
|
-
else if (item.kind === "text") {
|
|
1580
|
-
// {§fabricated-log-entry}: a log-entry heading in outside text rejects the attempt.
|
|
1581
|
-
const fabricated = FabricatedLog.find(item.content);
|
|
1582
|
-
if (fabricated !== null) {
|
|
1583
|
-
fabrications.push({ message: FabricatedLog.message(fabricated.heading), line: item.position.line + fabricated.line, column: 1, source: "harness" });
|
|
1584
|
-
continue;
|
|
1585
|
-
}
|
|
1586
|
-
const body = FabricatedLog.stripEchoes(item.content);
|
|
1587
|
-
if (body.length === 0)
|
|
1588
|
-
continue;
|
|
1589
|
-
span ??= { body: [], position: item.position };
|
|
1590
|
-
span.body.push(body);
|
|
1591
|
-
}
|
|
1592
|
-
else if (item.kind === "error") {
|
|
1593
|
-
const err = item.error;
|
|
1594
|
-
if (err instanceof PlurnkParseError) {
|
|
1595
|
-
operationOmitted ||= err.operationOmitted;
|
|
1596
|
-
if (err.severity === "warning") {
|
|
1597
|
-
parseNotices.push({
|
|
1598
|
-
source: "grammar",
|
|
1599
|
-
kind: "parse_advisory",
|
|
1600
|
-
level: "warn",
|
|
1601
|
-
directive: DIRECTIVE.advisory,
|
|
1602
|
-
message: err.message,
|
|
1603
|
-
position: {
|
|
1604
|
-
type: "content-offset",
|
|
1605
|
-
line: err.line,
|
|
1606
|
-
column: err.column,
|
|
1607
|
-
},
|
|
1608
|
-
parserSource: err.source,
|
|
1609
|
-
});
|
|
1610
|
-
}
|
|
1611
|
-
else {
|
|
1612
|
-
parseErrors.push({ message: err.message, line: err.line, column: err.column, source: err.source,
|
|
1613
|
-
...(err.recovery === undefined ? {} : { recovery: err.recovery }),
|
|
1614
|
-
...(item.attempt === undefined ? {} : { attempt: item.attempt }) });
|
|
1615
|
-
}
|
|
1616
|
-
}
|
|
1617
|
-
else {
|
|
1618
|
-
const msg = err?.message ?? "parse error";
|
|
1619
|
-
parseErrors.push({ message: msg, line: 0, column: 0, source: "parser" });
|
|
1620
|
-
}
|
|
1621
|
-
}
|
|
1622
|
-
}
|
|
1623
|
-
flushSpan();
|
|
1624
|
-
// {§unparsed-tail-boundary} — the lexer's one boundary fact: from `unparsedTail.from` on,
|
|
1625
|
-
// nothing was read. The statements that closed before it are ordinary facts and run; the
|
|
1626
|
-
// loss itself is one more hard diagnostic, a failed row the model sees. An emission that
|
|
1627
|
-
// lost its boundary before any statement closed has nothing admissible and is resampled.
|
|
1628
|
-
const tail = parsed.unparsedTail;
|
|
1629
|
-
if (tail !== undefined) {
|
|
1630
|
-
hasUnparsedTail = true;
|
|
1631
|
-
parseErrors.push({ message: tail.reason, line: tail.from.line, column: tail.from.column, source: "grammar" });
|
|
1632
|
-
}
|
|
1633
|
-
}
|
|
1634
1535
|
const reasoning = assistant.reasoning ?? null;
|
|
1635
1536
|
const reasoningOps = reasoning === null ? [] : PlurnkParser.parseReasoningOperations(reasoning, (warning) => {
|
|
1636
1537
|
parseNotices.push({
|
|
@@ -1679,6 +1580,115 @@ export default class TurnRunner {
|
|
|
1679
1580
|
emissionStatements,
|
|
1680
1581
|
};
|
|
1681
1582
|
}
|
|
1583
|
+
// {§outside-text} {§fabricated-log-entry} {§unparsed-tail-boundary} An emission's content parsed into its
|
|
1584
|
+
// statements and what sat beside them: outside text as NOTEs or the empty turn's source, a fabricated log
|
|
1585
|
+
// heading as the rejection it is, each parse error by its severity, and the lexer's one boundary fact.
|
|
1586
|
+
static #parseContent(content, executors, wellFormed) {
|
|
1587
|
+
const ops = [];
|
|
1588
|
+
const parseErrors = [];
|
|
1589
|
+
let contentStatementCount = 0;
|
|
1590
|
+
let hasUnparsedTail = false;
|
|
1591
|
+
let operationOmitted = false;
|
|
1592
|
+
const parseNotices = [];
|
|
1593
|
+
const fabrications = [];
|
|
1594
|
+
const outside = [];
|
|
1595
|
+
// {§observability-boundary} — the parse is observed without its input;
|
|
1596
|
+
// only the resulting statement count is attributable.
|
|
1597
|
+
const parsed = observedSync("contracts.parse", {}, (span) => {
|
|
1598
|
+
// {§executor-heading}: explicit invocations parse without registration; available names
|
|
1599
|
+
// also admit slotless headings. Dispatch resolves the then-current workspace registry.
|
|
1600
|
+
const result = PlurnkParser.parse(content, { executors, ...(wellFormed === undefined ? {} : { wellFormed }) });
|
|
1601
|
+
span.setAttribute("statements", result.items.filter((item) => item.kind === "statement").length);
|
|
1602
|
+
return result;
|
|
1603
|
+
});
|
|
1604
|
+
// {§outside-text}: beside a fenced operation, the text between two operations is one NOTE at its
|
|
1605
|
+
// position, annotation the model wrote without its fence; a turn that fenced no operation keeps
|
|
1606
|
+
// its text as its outside source and stays an empty turn ({§empty-turn}). Echoed emission
|
|
1607
|
+
// headings are announcements, not annotation, and are dropped ({§fabricated-log-entry}).
|
|
1608
|
+
const fenced = parsed.items.filter((item) => item.kind === "statement").length;
|
|
1609
|
+
let span = null;
|
|
1610
|
+
const flushSpan = () => {
|
|
1611
|
+
if (span === null)
|
|
1612
|
+
return;
|
|
1613
|
+
const body = span.body.join("\n\n");
|
|
1614
|
+
if (body.length > 0) {
|
|
1615
|
+
if (fenced > 0) {
|
|
1616
|
+
ops.push({ op: "NOTE", aside: null, metadata: null, target: null, lineMarker: null, body, position: span.position });
|
|
1617
|
+
contentStatementCount += 1;
|
|
1618
|
+
}
|
|
1619
|
+
else
|
|
1620
|
+
outside.push(body);
|
|
1621
|
+
}
|
|
1622
|
+
span = null;
|
|
1623
|
+
};
|
|
1624
|
+
for (const item of parsed.items) {
|
|
1625
|
+
if (item.kind !== "text")
|
|
1626
|
+
flushSpan();
|
|
1627
|
+
if (item.kind === "statement") {
|
|
1628
|
+
ops.push(item.statement);
|
|
1629
|
+
contentStatementCount += 1;
|
|
1630
|
+
}
|
|
1631
|
+
else if (item.kind === "text") {
|
|
1632
|
+
// {§fabricated-log-entry}: a log-entry heading in outside text rejects the attempt.
|
|
1633
|
+
const fabricated = FabricatedLog.find(item.content);
|
|
1634
|
+
if (fabricated !== null) {
|
|
1635
|
+
fabrications.push({ message: FabricatedLog.message(fabricated.heading), line: item.position.line + fabricated.line, column: 1, source: "harness" });
|
|
1636
|
+
continue;
|
|
1637
|
+
}
|
|
1638
|
+
const body = FabricatedLog.stripEchoes(item.content);
|
|
1639
|
+
if (body.length === 0)
|
|
1640
|
+
continue;
|
|
1641
|
+
span ??= { body: [], position: item.position };
|
|
1642
|
+
span.body.push(body);
|
|
1643
|
+
}
|
|
1644
|
+
else if (item.kind === "error") {
|
|
1645
|
+
operationOmitted ||= TurnRunner.#admitParseError(item, parseErrors, parseNotices);
|
|
1646
|
+
}
|
|
1647
|
+
}
|
|
1648
|
+
flushSpan();
|
|
1649
|
+
// {§unparsed-tail-boundary} — the lexer's one boundary fact: from `unparsedTail.from` on,
|
|
1650
|
+
// nothing was read. The statements that closed before it are ordinary facts and run; the
|
|
1651
|
+
// loss itself is one more hard diagnostic, a failed row the model sees. An emission that
|
|
1652
|
+
// lost its boundary before any statement closed has nothing admissible and is resampled.
|
|
1653
|
+
const tail = parsed.unparsedTail;
|
|
1654
|
+
if (tail !== undefined) {
|
|
1655
|
+
hasUnparsedTail = true;
|
|
1656
|
+
parseErrors.push({ message: tail.reason, line: tail.from.line, column: tail.from.column, source: "grammar" });
|
|
1657
|
+
}
|
|
1658
|
+
return { ops, contentStatementCount, parseErrors, parseNotices, fabrications, outside, hasUnparsedTail, operationOmitted };
|
|
1659
|
+
}
|
|
1660
|
+
// One parse error by its severity: an advisory is a grammar Notice beside the turn; an error is a diagnostic
|
|
1661
|
+
// the model sees, with its recovery and the attempt it came from. Returns whether an operation was omitted.
|
|
1662
|
+
static #admitParseError(item, parseErrors, parseNotices) {
|
|
1663
|
+
const err = item.error;
|
|
1664
|
+
if (err instanceof PlurnkParseError) {
|
|
1665
|
+
if (err.severity === "warning") {
|
|
1666
|
+
parseNotices.push({
|
|
1667
|
+
source: "grammar",
|
|
1668
|
+
kind: "parse_advisory",
|
|
1669
|
+
level: "warn",
|
|
1670
|
+
directive: DIRECTIVE.advisory,
|
|
1671
|
+
message: err.message,
|
|
1672
|
+
position: {
|
|
1673
|
+
type: "content-offset",
|
|
1674
|
+
line: err.line,
|
|
1675
|
+
column: err.column,
|
|
1676
|
+
},
|
|
1677
|
+
parserSource: err.source,
|
|
1678
|
+
});
|
|
1679
|
+
}
|
|
1680
|
+
else {
|
|
1681
|
+
parseErrors.push({ message: err.message, line: err.line, column: err.column, source: err.source,
|
|
1682
|
+
...(err.recovery === undefined ? {} : { recovery: err.recovery }),
|
|
1683
|
+
...(item.attempt === undefined ? {} : { attempt: item.attempt }) });
|
|
1684
|
+
}
|
|
1685
|
+
}
|
|
1686
|
+
else {
|
|
1687
|
+
const msg = err?.message ?? "parse error";
|
|
1688
|
+
parseErrors.push({ message: msg, line: 0, column: 0, source: "parser" });
|
|
1689
|
+
}
|
|
1690
|
+
return err instanceof PlurnkParseError && err.operationOmitted;
|
|
1691
|
+
}
|
|
1682
1692
|
// #note12 — extension reference docs are materialized beneath
|
|
1683
1693
|
// worker:///_plurnk/plurnk/ by LoopDocs.
|
|
1684
1694
|
// {§exec-lifetime} — a `"turn"` lifetime: abort the worker's open turn-scoped streams via their
|