@plurnk/plurnk-service 4.1.0 → 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/.env.defaults +3 -0
- package/INSTALL.md +7 -2
- package/README.md +3 -1
- package/SPEC.md +1996 -1370
- 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 +2 -2
- package/dist/completions/plurnk-service.bash +2 -2
- package/dist/completions/plurnk-service.fish +2 -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 +18 -0
- package/dist/core/AmbientMembers.d.ts.map +1 -0
- package/dist/core/AmbientMembers.js +84 -0
- package/dist/core/AmbientMembers.js.map +1 -0
- 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 +6 -4
- package/dist/core/CoreSchemeServices.js.map +1 -1
- package/dist/core/DataStatementRunner.d.ts.map +1 -1
- package/dist/core/DataStatementRunner.js +24 -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 +242 -132
- 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.d.ts +1 -0
- package/dist/core/FileAddress.d.ts.map +1 -1
- package/dist/core/FileAddress.js +8 -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 +197 -173
- 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 +1 -0
- package/dist/core/caps/SchemeCtxImpl.d.ts.map +1 -1
- package/dist/core/caps/SchemeCtxImpl.js +10 -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 +8 -0
- package/dist/core/git-membership.d.ts.map +1 -1
- package/dist/core/git-membership.js +107 -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/notifications.d.ts +5 -0
- package/dist/core/notifications.d.ts.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/plurnk-uri.d.ts +1 -1
- package/dist/core/plurnk-uri.d.ts.map +1 -1
- package/dist/core/plurnk-uri.js +6 -5
- package/dist/core/plurnk-uri.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/scheme-types.d.ts +20 -0
- package/dist/core/scheme-types.d.ts.map +1 -1
- 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 +12 -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 +148 -84
- 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 +2 -1
- package/dist/schemes/_entry-find.d.ts.map +1 -1
- package/dist/schemes/_entry-find.js +241 -130
- 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 +263 -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 +7 -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 +24 -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 +37 -17
- 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 +31 -33
- 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.";
|
|
@@ -106,24 +98,23 @@ const windowOverflowFailure = (overflow) => Results.failure("engine:context", "w
|
|
|
106
98
|
// {§context-over-budget-row} — the row is the mandate; the gauge is the one home for the numbers
|
|
107
99
|
// ({§context-gauge}), which the row's own charge would otherwise put out of agreement.
|
|
108
100
|
const OVER_BUDGET_DETAIL = "Context exceeds budget. YOU MUST ONLY KILL, MOVE or NOTE this turn.";
|
|
109
|
-
// {§worker-initialization-entry} — the two NOTEs that open and close the initialization surveys,
|
|
110
|
-
// as the card's own
|
|
101
|
+
// {§worker-initialization-entry} — the two NOTEs that open and close the initialization surveys, both
|
|
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 plans, findings, and decisions 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
|
-
const
|
|
121
|
-
op: "NOTE", aside: "
|
|
122
|
-
body: "
|
|
108
|
+
const INITIALIZATION_CLOSING_NOTE = {
|
|
109
|
+
op: "NOTE", aside: "plan", metadata: null, target: null, lineMarker: null,
|
|
110
|
+
body: "Evaluate and react to the Open Message.", position: UNKNOWN_POSITION,
|
|
123
111
|
};
|
|
112
|
+
// {§continued-without-note} — said once, in the next packet, of a continuing turn that carried no NOTE.
|
|
113
|
+
const CONTINUED_WITHOUT_NOTE = "The turn continued without a NOTE.";
|
|
124
114
|
// {§notice-directive} — what each notice of the model's own output asks of it: MUST where the card says MUST
|
|
125
115
|
// or the output was refused, SHOULD where a near-miss was accepted.
|
|
126
116
|
const DIRECTIVE = Object.freeze({
|
|
117
|
+
note: "YOU MUST persist all new facts, ideas, and plans in NOTEs on every turn.",
|
|
127
118
|
emission: "YOU MUST ONLY emit fenced operation batches; with the parameters, pattern, and terse aside on the fenced operation line.",
|
|
128
119
|
advisory: "YOU SHOULD write the canonical form.",
|
|
129
120
|
output: "YOU SHOULD emit fewer or shorter operations per turn.",
|
|
@@ -165,7 +156,6 @@ export default class TurnRunner {
|
|
|
165
156
|
#weighContent;
|
|
166
157
|
#notices;
|
|
167
158
|
#problems;
|
|
168
|
-
#strikes;
|
|
169
159
|
#packets;
|
|
170
160
|
#dispatcher;
|
|
171
161
|
#liveSubscriptions;
|
|
@@ -177,19 +167,19 @@ export default class TurnRunner {
|
|
|
177
167
|
#warmWorkspace;
|
|
178
168
|
#dispatch;
|
|
179
169
|
#resolveWorkerProviderIdentity;
|
|
170
|
+
#loopGauge;
|
|
180
171
|
// {§operator-grammar} — one read per path per daemon; the file is the operator's and static.
|
|
181
172
|
#grammarCache = new Map();
|
|
182
173
|
#materialization;
|
|
183
174
|
#bareBatch;
|
|
184
175
|
#admitted;
|
|
185
|
-
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, }) {
|
|
186
177
|
this.#db = db;
|
|
187
178
|
this.#schemes = schemes;
|
|
188
179
|
this.#mimetypes = mimetypes;
|
|
189
180
|
this.#weighContent = weigh;
|
|
190
181
|
this.#notices = notices;
|
|
191
182
|
this.#problems = problems;
|
|
192
|
-
this.#strikes = strikes;
|
|
193
183
|
this.#packets = packets;
|
|
194
184
|
this.#dispatcher = dispatcher;
|
|
195
185
|
this.#liveSubscriptions = liveSubscriptions;
|
|
@@ -201,6 +191,7 @@ export default class TurnRunner {
|
|
|
201
191
|
this.#warmWorkspace = warmWorkspace;
|
|
202
192
|
this.#dispatch = dispatch;
|
|
203
193
|
this.#resolveWorkerProviderIdentity = resolveWorkerProviderIdentity;
|
|
194
|
+
this.#loopGauge = loopGauge;
|
|
204
195
|
this.#materialization = new TurnMaterialization({ db: this.#db, weighContent: this.#weighContent, mimetypes: this.#mimetypes });
|
|
205
196
|
this.#bareBatch = new BareBatchRunner({ db: this.#db, providerAttributions: this.#providerAttributions.bind(this), providerFailure: TurnRunner.#providerFailure });
|
|
206
197
|
this.#admitted = new AdmittedTurnExecutor({ db: this.#db, schemes: this.#schemes, notices: this.#notices, problems: this.#problems, dispatcher: this.#dispatcher, bareBatch: this.#bareBatch });
|
|
@@ -212,10 +203,14 @@ export default class TurnRunner {
|
|
|
212
203
|
const packetCount = await this.#db.engine_loop_packet_count.get({ loop_id: args.loopId });
|
|
213
204
|
if (packetCount === undefined)
|
|
214
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);
|
|
215
208
|
this.#notify.loopPacketNotify(args.workspaceId, {
|
|
216
209
|
workerId: args.workerId,
|
|
217
210
|
loopId: args.loopId,
|
|
211
|
+
loopSeq: packetCount.sequence,
|
|
218
212
|
packetCount: packetCount.count,
|
|
213
|
+
gauge,
|
|
219
214
|
});
|
|
220
215
|
}
|
|
221
216
|
// {§operator-grammar} — the operator's grammar text for this provider, or undefined when
|
|
@@ -414,28 +409,26 @@ export default class TurnRunner {
|
|
|
414
409
|
const initializationStatements = [];
|
|
415
410
|
// {§worker-initialization-entry} — the worker's first turn is the worked
|
|
416
411
|
// example itself: the actual orienting operations.
|
|
417
|
-
// {§turn0-agents-stunt} — the project AGENTS.md
|
|
418
|
-
// worker:///_plurnk/
|
|
419
|
-
//
|
|
420
|
-
// 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.
|
|
421
415
|
if (initializationTurn !== null) {
|
|
422
|
-
const
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
const
|
|
430
|
-
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",
|
|
431
425
|
username: null, password: null, hostname: null, port: null,
|
|
432
|
-
pathname
|
|
426
|
+
pathname, query: null, fragment: null,
|
|
433
427
|
};
|
|
434
|
-
|
|
435
|
-
op: "READ", aside: null, target
|
|
428
|
+
initializationStatements.push({
|
|
429
|
+
op: "READ", aside: null, target,
|
|
436
430
|
metadata: null, lineMarker: null, matcher: null, body: null, position: UNKNOWN_POSITION,
|
|
437
|
-
};
|
|
438
|
-
initializationStatements.push(agentsRead);
|
|
431
|
+
});
|
|
439
432
|
}
|
|
440
433
|
}
|
|
441
434
|
return {
|
|
@@ -510,7 +503,17 @@ export default class TurnRunner {
|
|
|
510
503
|
// {§emission-row} — a `_plurnk` turn has receipts, never a fabricated assistant emission.
|
|
511
504
|
// {§message-arrival} — the message reaches the model as an inbound SEND in the first
|
|
512
505
|
// model turn; initialization does not READ it a second time.
|
|
513
|
-
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
|
+
}
|
|
514
517
|
if (admittedInitializationStatements.length === 0) {
|
|
515
518
|
// Nothing to survey (the preview off, no project guidance): the turn opens and completes empty.
|
|
516
519
|
await Turn.complete(this.#db, initializationTurn.id, 200);
|
|
@@ -519,7 +522,7 @@ export default class TurnRunner {
|
|
|
519
522
|
// {§worker-initialization-entry} — the example turn shows the NOTE practice the card teaches:
|
|
520
523
|
// when the surveys run, one NOTE opens them and one closes them.
|
|
521
524
|
const programStatements = admittedInitializationStatements.some((statement) => statement.op === "FIND")
|
|
522
|
-
? [INITIALIZATION_NOTE, ...admittedInitializationStatements,
|
|
525
|
+
? [INITIALIZATION_NOTE, ...admittedInitializationStatements, INITIALIZATION_CLOSING_NOTE]
|
|
523
526
|
: admittedInitializationStatements;
|
|
524
527
|
const program = TurnOps.renderInternal(programStatements);
|
|
525
528
|
const admitted = PlurnkParser.parseStatements(program).items.flatMap((item) => item.kind === "statement" ? [item.statement] : []);
|
|
@@ -550,18 +553,11 @@ export default class TurnRunner {
|
|
|
550
553
|
// {§actor-boundary-catalog-preview} — the opening surveys, each admitted only when
|
|
551
554
|
// its scheme is registered for the workspace. A positive filesItems caps the
|
|
552
555
|
// project rows.
|
|
553
|
-
async #catalogSurveys({ workspaceId }, { workerName, initializationPolicies
|
|
556
|
+
async #catalogSurveys({ workspaceId }, { workerName, initializationPolicies }, filesItems) {
|
|
554
557
|
const catalogSchemes = await this.#db.engine_scheme_catalog_summary.all({ workspace_id: workspaceId });
|
|
555
558
|
const fileItems = catalogSchemes.find(({ scheme }) => scheme === "file")?.shallow_items ?? 0;
|
|
556
559
|
const fileCap = filesItems > 0 && fileItems > 0 ? Math.min(filesItems, fileItems) : null;
|
|
557
560
|
const surveys = [
|
|
558
|
-
{
|
|
559
|
-
// Trial (#1073): the survey reads its own program, so the log carries one program verbatim
|
|
560
|
-
// and shows that every ops:// turn is readable.
|
|
561
|
-
op: "READ", aside: "this program",
|
|
562
|
-
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 },
|
|
563
|
-
metadata: null, lineMarker: null, matcher: null, body: null, position: UNKNOWN_POSITION,
|
|
564
|
-
},
|
|
565
561
|
{
|
|
566
562
|
op: "FIND", aside: null,
|
|
567
563
|
target: { kind: "url", raw: "skill://*/SKILL.md", scheme: "skill", username: null, password: null, hostname: "*", port: null, pathname: "/SKILL.md", query: null, fragment: null },
|
|
@@ -910,9 +906,8 @@ export default class TurnRunner {
|
|
|
910
906
|
attempts.railGrammar = await this.#operatorGrammar(provider);
|
|
911
907
|
attempts.wellFormed = await this.#bodyChecks(workspaceId);
|
|
912
908
|
const attemptLimit = readEmissionAttempts();
|
|
913
|
-
const strikeStreak = await this.#strikes.streak(loopId);
|
|
914
909
|
for (let attempt = 1; attempt <= attemptLimit;) {
|
|
915
|
-
const verdict = await this.#issueProviderCall(args, request, attempts, attempt
|
|
910
|
+
const verdict = await this.#issueProviderCall(args, request, attempts, attempt);
|
|
916
911
|
if (verdict === "admitted")
|
|
917
912
|
break;
|
|
918
913
|
if (verdict === "rejected")
|
|
@@ -963,7 +958,7 @@ export default class TurnRunner {
|
|
|
963
958
|
// under the reasoning observer, and its classification. {§provider-recovery}
|
|
964
959
|
// re-issues the same emission attempt; the parser's admission is the one verdict
|
|
965
960
|
// on a completed exchange.
|
|
966
|
-
async #issueProviderCall(args, request, attempts, attempt
|
|
961
|
+
async #issueProviderCall(args, request, attempts, attempt) {
|
|
967
962
|
const { provider, workspaceId, workerId, loopId } = args;
|
|
968
963
|
// A recovery re-issue does not consume a grammar-emission attempt. Every
|
|
969
964
|
// logical provider call still receives its own durable sequence and accounting.
|
|
@@ -993,10 +988,10 @@ export default class TurnRunner {
|
|
|
993
988
|
}
|
|
994
989
|
attempts.attemptId = attemptRow.id;
|
|
995
990
|
attempts.callInFlight = true;
|
|
996
|
-
const reasoning = this.#reasoningObserver(args, request
|
|
991
|
+
const reasoning = this.#reasoningObserver(args, request, modelCall);
|
|
997
992
|
let completedResponse;
|
|
998
993
|
try {
|
|
999
|
-
completedResponse = await this.#generate(args, request, attempts, modelCall, reasoning
|
|
994
|
+
completedResponse = await this.#generate(args, request, attempts, modelCall, reasoning);
|
|
1000
995
|
}
|
|
1001
996
|
catch (error) {
|
|
1002
997
|
if (error instanceof ProviderError
|
|
@@ -1034,7 +1029,7 @@ export default class TurnRunner {
|
|
|
1034
1029
|
// {§notifications-reasoning-event} — only the parent emission is observed;
|
|
1035
1030
|
// BARE has no observer on its isolated calls. Reasoning deltas cite the physical
|
|
1036
1031
|
// request they stream in; a new request or the call's end closes the open span.
|
|
1037
|
-
#reasoningObserver({ workspaceId, workerId, loopId }, turnId, modelCall) {
|
|
1032
|
+
#reasoningObserver({ workspaceId, workerId, loopId }, { turnId, loopSeq, seq: turnSeq }, modelCall) {
|
|
1038
1033
|
let reasoningStarted = false;
|
|
1039
1034
|
let reasoningRequestSequence = 0;
|
|
1040
1035
|
const end = () => {
|
|
@@ -1044,6 +1039,8 @@ export default class TurnRunner {
|
|
|
1044
1039
|
workerId,
|
|
1045
1040
|
loopId,
|
|
1046
1041
|
turnId,
|
|
1042
|
+
loopSeq,
|
|
1043
|
+
turnSeq,
|
|
1047
1044
|
modelCallId: modelCall.id,
|
|
1048
1045
|
requestSequence: reasoningRequestSequence,
|
|
1049
1046
|
phase: "end",
|
|
@@ -1068,6 +1065,8 @@ export default class TurnRunner {
|
|
|
1068
1065
|
workerId,
|
|
1069
1066
|
loopId,
|
|
1070
1067
|
turnId,
|
|
1068
|
+
loopSeq,
|
|
1069
|
+
turnSeq,
|
|
1071
1070
|
modelCallId: modelCall.id,
|
|
1072
1071
|
requestSequence: reasoningRequestSequence,
|
|
1073
1072
|
phase: "start",
|
|
@@ -1077,6 +1076,8 @@ export default class TurnRunner {
|
|
|
1077
1076
|
workerId,
|
|
1078
1077
|
loopId,
|
|
1079
1078
|
turnId,
|
|
1079
|
+
loopSeq,
|
|
1080
|
+
turnSeq,
|
|
1080
1081
|
modelCallId: modelCall.id,
|
|
1081
1082
|
requestSequence: reasoningRequestSequence,
|
|
1082
1083
|
phase: "content",
|
|
@@ -1088,7 +1089,7 @@ export default class TurnRunner {
|
|
|
1088
1089
|
// The exchange under its GenAI span: the packet's observations are recorded, the
|
|
1089
1090
|
// provider generates against the wire request, and the call's accounting is
|
|
1090
1091
|
// asserted whether it resolved or failed.
|
|
1091
|
-
async #generate({ provider, workspaceId }, request, attempts, modelCall, reasoning
|
|
1092
|
+
async #generate({ provider, workspaceId }, request, attempts, modelCall, reasoning) {
|
|
1092
1093
|
return await observed(// {§observability-boundary}
|
|
1093
1094
|
genAiRequestName(provider.model), { model: provider.model, attempt: attempts.modelCallSequence }, async (span) => {
|
|
1094
1095
|
try {
|
|
@@ -1253,10 +1254,11 @@ export default class TurnRunner {
|
|
|
1253
1254
|
if (capacityFailure) {
|
|
1254
1255
|
return turnResult(request, recorded.result.status, { capacityHardStop: true, capacityFailure: recorded.result, emissionAttempts });
|
|
1255
1256
|
}
|
|
1256
|
-
if (err instanceof ProviderError && err.kind === "invalid_response") {
|
|
1257
|
-
// {§engine-rails} Contract Strikes: the provider violated its response
|
|
1258
|
-
//
|
|
1259
|
-
// rail — never an instant loop death — rules whether
|
|
1257
|
+
if (err instanceof ProviderError && (err.kind === "invalid_response" || err.kind === "generation_failed")) {
|
|
1258
|
+
// {§engine-rails} Contract Strikes: the provider violated its response contract, or
|
|
1259
|
+
// ended generation with an error ({§provider-generation-failed}). The failure is durable
|
|
1260
|
+
// and the turn is complete; the strike rail — never an instant loop death — rules whether
|
|
1261
|
+
// the streak ends it.
|
|
1260
1262
|
return turnResult(request, recorded.result.status, {
|
|
1261
1263
|
outcomes: [{ op: null, status: recorded.result.status, problemType: recorded.result.problem?.type ?? null }],
|
|
1262
1264
|
fingerprint: `provider-contract-violation:${turnId}`,
|
|
@@ -1409,7 +1411,7 @@ export default class TurnRunner {
|
|
|
1409
1411
|
model: callMetadata.model,
|
|
1410
1412
|
// Opaque provider metadata plus the grammar transport key.
|
|
1411
1413
|
// {§meta-passthrough}, {§operator-grammar}
|
|
1412
|
-
meta: JSON.stringify({ ...
|
|
1414
|
+
meta: JSON.stringify({ ...response.meta, ...railKeys }),
|
|
1413
1415
|
},
|
|
1414
1416
|
});
|
|
1415
1417
|
}
|
|
@@ -1454,6 +1456,16 @@ export default class TurnRunner {
|
|
|
1454
1456
|
onDispatch,
|
|
1455
1457
|
onSettled,
|
|
1456
1458
|
});
|
|
1459
|
+
// {§continued-without-note} — a turn the loop continues past or parks on, having carried no NOTE
|
|
1460
|
+
// forward in its program or from its reasoning, is told so in the next packet, in the card's own
|
|
1461
|
+
// words. An empty turn has its own no-operation row instead.
|
|
1462
|
+
const ops = split.packetAssistant.ops;
|
|
1463
|
+
if ((executed.status === 102 || executed.status === 202) && ops.length > 0
|
|
1464
|
+
&& !ops.some((statement) => "op" in statement && statement.op === "NOTE")) {
|
|
1465
|
+
this.#notices.push(workspaceId, workerId, loopId, {
|
|
1466
|
+
source: "engine:turn", kind: "continued_without_note", level: "warn", directive: DIRECTIVE.note, message: CONTINUED_WITHOUT_NOTE,
|
|
1467
|
+
});
|
|
1468
|
+
}
|
|
1457
1469
|
return turnResult(request, executed.status, {
|
|
1458
1470
|
outcomes: executed.outcomes,
|
|
1459
1471
|
progressed: executed.progressed,
|
|
@@ -1512,111 +1524,14 @@ export default class TurnRunner {
|
|
|
1512
1524
|
}
|
|
1513
1525
|
#splitResponse(response, executors = [], wellFormed) {
|
|
1514
1526
|
const { assistant } = response;
|
|
1515
|
-
|
|
1516
|
-
const
|
|
1517
|
-
const parseErrors =
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
const fabrications = [];
|
|
1523
|
-
const outside = [];
|
|
1524
|
-
if (preParsedOps !== undefined) {
|
|
1525
|
-
ops.push(...preParsedOps);
|
|
1526
|
-
contentStatementCount = preParsedOps.length;
|
|
1527
|
-
}
|
|
1528
|
-
else {
|
|
1529
|
-
// {§observability-boundary} — the parse is observed without its input;
|
|
1530
|
-
// only the resulting statement count is attributable.
|
|
1531
|
-
const parsed = observedSync("contracts.parse", {}, (span) => {
|
|
1532
|
-
// {§executor-heading}: explicit invocations parse without registration; available names
|
|
1533
|
-
// also admit slotless headings. Dispatch resolves the then-current workspace registry.
|
|
1534
|
-
const result = PlurnkParser.parse(assistant.content, { executors, ...(wellFormed === undefined ? {} : { wellFormed }) });
|
|
1535
|
-
span.setAttribute("statements", result.items.filter((item) => item.kind === "statement").length);
|
|
1536
|
-
return result;
|
|
1537
|
-
});
|
|
1538
|
-
// {§outside-text}: beside a fenced operation, the text between two operations is one NOTE at its
|
|
1539
|
-
// position, annotation the model wrote without its fence; a turn that fenced no operation keeps
|
|
1540
|
-
// its text as its outside source and stays an empty turn ({§empty-turn}). Echoed emission
|
|
1541
|
-
// headings are announcements, not annotation, and are dropped ({§fabricated-log-entry}).
|
|
1542
|
-
const fenced = parsed.items.filter((item) => item.kind === "statement").length;
|
|
1543
|
-
let span = null;
|
|
1544
|
-
const flushSpan = () => {
|
|
1545
|
-
if (span === null)
|
|
1546
|
-
return;
|
|
1547
|
-
const body = span.body.join("\n\n");
|
|
1548
|
-
if (body.length > 0) {
|
|
1549
|
-
if (fenced > 0) {
|
|
1550
|
-
ops.push({ op: "NOTE", aside: null, metadata: null, target: null, lineMarker: null, body, position: span.position });
|
|
1551
|
-
contentStatementCount += 1;
|
|
1552
|
-
}
|
|
1553
|
-
else
|
|
1554
|
-
outside.push(body);
|
|
1555
|
-
}
|
|
1556
|
-
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,
|
|
1557
1534
|
};
|
|
1558
|
-
for (const item of parsed.items) {
|
|
1559
|
-
if (item.kind !== "text")
|
|
1560
|
-
flushSpan();
|
|
1561
|
-
if (item.kind === "statement") {
|
|
1562
|
-
ops.push(item.statement);
|
|
1563
|
-
contentStatementCount += 1;
|
|
1564
|
-
}
|
|
1565
|
-
else if (item.kind === "text") {
|
|
1566
|
-
// {§fabricated-log-entry}: a log-entry heading in outside text rejects the attempt.
|
|
1567
|
-
const fabricated = FabricatedLog.find(item.content);
|
|
1568
|
-
if (fabricated !== null) {
|
|
1569
|
-
fabrications.push({ message: FabricatedLog.message(fabricated.heading), line: item.position.line + fabricated.line, column: 1, source: "harness" });
|
|
1570
|
-
continue;
|
|
1571
|
-
}
|
|
1572
|
-
const body = FabricatedLog.stripEchoes(item.content);
|
|
1573
|
-
if (body.length === 0)
|
|
1574
|
-
continue;
|
|
1575
|
-
span ??= { body: [], position: item.position };
|
|
1576
|
-
span.body.push(body);
|
|
1577
|
-
}
|
|
1578
|
-
else if (item.kind === "error") {
|
|
1579
|
-
const err = item.error;
|
|
1580
|
-
if (err instanceof PlurnkParseError) {
|
|
1581
|
-
operationOmitted ||= err.operationOmitted;
|
|
1582
|
-
if (err.severity === "warning") {
|
|
1583
|
-
parseNotices.push({
|
|
1584
|
-
source: "grammar",
|
|
1585
|
-
kind: "parse_advisory",
|
|
1586
|
-
level: "warn",
|
|
1587
|
-
directive: DIRECTIVE.advisory,
|
|
1588
|
-
message: err.message,
|
|
1589
|
-
position: {
|
|
1590
|
-
type: "content-offset",
|
|
1591
|
-
line: err.line,
|
|
1592
|
-
column: err.column,
|
|
1593
|
-
},
|
|
1594
|
-
parserSource: err.source,
|
|
1595
|
-
});
|
|
1596
|
-
}
|
|
1597
|
-
else {
|
|
1598
|
-
parseErrors.push({ message: err.message, line: err.line, column: err.column, source: err.source,
|
|
1599
|
-
...(err.recovery === undefined ? {} : { recovery: err.recovery }),
|
|
1600
|
-
...(item.attempt === undefined ? {} : { attempt: item.attempt }) });
|
|
1601
|
-
}
|
|
1602
|
-
}
|
|
1603
|
-
else {
|
|
1604
|
-
const msg = err?.message ?? "parse error";
|
|
1605
|
-
parseErrors.push({ message: msg, line: 0, column: 0, source: "parser" });
|
|
1606
|
-
}
|
|
1607
|
-
}
|
|
1608
|
-
}
|
|
1609
|
-
flushSpan();
|
|
1610
|
-
// {§unparsed-tail-boundary} — the lexer's one boundary fact: from `unparsedTail.from` on,
|
|
1611
|
-
// nothing was read. The statements that closed before it are ordinary facts and run; the
|
|
1612
|
-
// loss itself is one more hard diagnostic, a failed row the model sees. An emission that
|
|
1613
|
-
// lost its boundary before any statement closed has nothing admissible and is resampled.
|
|
1614
|
-
const tail = parsed.unparsedTail;
|
|
1615
|
-
if (tail !== undefined) {
|
|
1616
|
-
hasUnparsedTail = true;
|
|
1617
|
-
parseErrors.push({ message: tail.reason, line: tail.from.line, column: tail.from.column, source: "grammar" });
|
|
1618
|
-
}
|
|
1619
|
-
}
|
|
1620
1535
|
const reasoning = assistant.reasoning ?? null;
|
|
1621
1536
|
const reasoningOps = reasoning === null ? [] : PlurnkParser.parseReasoningOperations(reasoning, (warning) => {
|
|
1622
1537
|
parseNotices.push({
|
|
@@ -1665,6 +1580,115 @@ export default class TurnRunner {
|
|
|
1665
1580
|
emissionStatements,
|
|
1666
1581
|
};
|
|
1667
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
|
+
}
|
|
1668
1692
|
// #note12 — extension reference docs are materialized beneath
|
|
1669
1693
|
// worker:///_plurnk/plurnk/ by LoopDocs.
|
|
1670
1694
|
// {§exec-lifetime} — a `"turn"` lifetime: abort the worker's open turn-scoped streams via their
|