@plurnk/plurnk-service 1.16.5 → 1.18.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 +140 -246
- package/INSTALL.md +84 -138
- package/README.md +10 -6
- package/SPEC.md +2468 -1694
- package/dist/Paths.d.ts +2 -0
- package/dist/Paths.d.ts.map +1 -1
- package/dist/Paths.js +2 -0
- package/dist/Paths.js.map +1 -1
- package/dist/build-info.d.ts.map +1 -1
- package/dist/build-info.js +7 -1
- package/dist/build-info.js.map +1 -1
- package/dist/build-info.json +1 -1
- package/dist/content/body-preview.d.ts +8 -0
- package/dist/content/body-preview.d.ts.map +1 -0
- package/dist/content/body-preview.js +39 -0
- package/dist/content/body-preview.js.map +1 -0
- package/dist/content/byte-view.d.ts +1 -4
- package/dist/content/byte-view.d.ts.map +1 -1
- package/dist/content/byte-view.js.map +1 -1
- package/dist/content/edit-collision.d.ts.map +1 -1
- package/dist/content/edit-collision.js +3 -4
- package/dist/content/edit-collision.js.map +1 -1
- package/dist/content/line-anchors.d.ts +2 -2
- package/dist/content/line-anchors.d.ts.map +1 -1
- package/dist/content/line-anchors.js +4 -3
- package/dist/content/line-anchors.js.map +1 -1
- package/dist/content/line-selection.d.ts +9 -0
- package/dist/content/line-selection.d.ts.map +1 -0
- package/dist/content/line-selection.js +29 -0
- package/dist/content/line-selection.js.map +1 -0
- package/dist/content/matcher.d.ts +0 -1
- package/dist/content/matcher.d.ts.map +1 -1
- package/dist/content/matcher.js +2 -3
- package/dist/content/matcher.js.map +1 -1
- package/dist/content/pattern-edits.d.ts +39 -0
- package/dist/content/pattern-edits.d.ts.map +1 -0
- package/dist/content/pattern-edits.js +121 -0
- package/dist/content/pattern-edits.js.map +1 -0
- package/dist/content/read-projector.d.ts +18 -9
- package/dist/content/read-projector.d.ts.map +1 -1
- package/dist/content/read-projector.js +132 -35
- package/dist/content/read-projector.js.map +1 -1
- package/dist/content/read-resolve.d.ts +4 -1
- package/dist/content/read-resolve.d.ts.map +1 -1
- package/dist/content/read-resolve.js +42 -7
- package/dist/content/read-resolve.js.map +1 -1
- package/dist/core/AdmittedTurnExecutor.d.ts +2 -5
- package/dist/core/AdmittedTurnExecutor.d.ts.map +1 -1
- package/dist/core/AdmittedTurnExecutor.js +96 -88
- package/dist/core/AdmittedTurnExecutor.js.map +1 -1
- package/dist/core/BareBatchRunner.d.ts +6 -1
- package/dist/core/BareBatchRunner.d.ts.map +1 -1
- package/dist/core/BareBatchRunner.js +20 -5
- package/dist/core/BareBatchRunner.js.map +1 -1
- package/dist/core/BudgetReadout.d.ts +2 -3
- package/dist/core/BudgetReadout.d.ts.map +1 -1
- package/dist/core/BudgetReadout.js +23 -32
- package/dist/core/BudgetReadout.js.map +1 -1
- package/dist/core/CapabilityPolicies.d.ts +3 -8
- package/dist/core/CapabilityPolicies.d.ts.map +1 -1
- package/dist/core/CapabilityPolicies.js +2 -28
- package/dist/core/CapabilityPolicies.js.map +1 -1
- package/dist/core/CapabilityResolver.d.ts +10 -10
- package/dist/core/CapabilityResolver.d.ts.map +1 -1
- package/dist/core/CapabilityResolver.js +122 -93
- package/dist/core/CapabilityResolver.js.map +1 -1
- package/dist/core/ChannelWrite.d.ts +15 -11
- package/dist/core/ChannelWrite.d.ts.map +1 -1
- package/dist/core/ChannelWrite.js +12 -13
- package/dist/core/ChannelWrite.js.map +1 -1
- package/dist/core/ChannelWrite.sql +99 -9
- package/dist/core/ClientInteractions.d.ts.map +1 -1
- package/dist/core/ClientInteractions.js +7 -0
- package/dist/core/ClientInteractions.js.map +1 -1
- package/dist/core/CoreSchemeServices.d.ts +13 -10
- package/dist/core/CoreSchemeServices.d.ts.map +1 -1
- package/dist/core/CoreSchemeServices.js +13 -5
- package/dist/core/CoreSchemeServices.js.map +1 -1
- package/dist/core/DataStatementRunner.d.ts +2 -2
- package/dist/core/DataStatementRunner.d.ts.map +1 -1
- package/dist/core/DataStatementRunner.js +208 -161
- package/dist/core/DataStatementRunner.js.map +1 -1
- package/dist/core/Dispatcher.d.ts +24 -26
- package/dist/core/Dispatcher.d.ts.map +1 -1
- package/dist/core/Dispatcher.js +381 -232
- package/dist/core/Dispatcher.js.map +1 -1
- package/dist/core/Dispatcher.sql +66 -0
- package/dist/core/DurableStatement.d.ts.map +1 -1
- package/dist/core/DurableStatement.js +2 -1
- package/dist/core/DurableStatement.js.map +1 -1
- package/dist/core/EditMutations.d.ts +14 -18
- package/dist/core/EditMutations.d.ts.map +1 -1
- package/dist/core/EditMutations.js +211 -280
- package/dist/core/EditMutations.js.map +1 -1
- package/dist/core/EditMutations.sql +15 -0
- package/dist/core/EditSequence.d.ts +13 -0
- package/dist/core/EditSequence.d.ts.map +1 -0
- package/dist/core/EditSequence.js +73 -0
- package/dist/core/EditSequence.js.map +1 -0
- package/dist/core/Engine.d.ts +17 -23
- package/dist/core/Engine.d.ts.map +1 -1
- package/dist/core/Engine.js +74 -164
- package/dist/core/Engine.js.map +1 -1
- package/dist/core/Engine.sql +0 -724
- package/dist/core/EntryAddressBinding.d.ts +7 -17
- package/dist/core/EntryAddressBinding.d.ts.map +1 -1
- package/dist/core/EntryAddressBinding.js +12 -72
- package/dist/core/EntryAddressBinding.js.map +1 -1
- package/dist/core/ExecutionOutputs.d.ts +9 -0
- package/dist/core/ExecutionOutputs.d.ts.map +1 -0
- package/dist/core/ExecutionOutputs.js +36 -0
- package/dist/core/ExecutionOutputs.js.map +1 -0
- package/dist/core/ExecutionOutputs.sql +21 -0
- package/dist/core/ExecutorRegistry.d.ts +11 -5
- package/dist/core/ExecutorRegistry.d.ts.map +1 -1
- package/dist/core/ExecutorRegistry.js +37 -32
- package/dist/core/ExecutorRegistry.js.map +1 -1
- package/dist/core/HostPaths.d.ts +1 -0
- package/dist/core/HostPaths.d.ts.map +1 -1
- package/dist/core/HostPaths.js +4 -0
- package/dist/core/HostPaths.js.map +1 -1
- package/dist/core/InferenceCall.d.ts.map +1 -1
- package/dist/core/InferenceCall.js +1 -2
- package/dist/core/InferenceCall.js.map +1 -1
- package/dist/core/InferenceCall.sql +29 -0
- package/dist/core/KillHandler.d.ts +1 -0
- package/dist/core/KillHandler.d.ts.map +1 -1
- package/dist/core/KillHandler.js +24 -21
- package/dist/core/KillHandler.js.map +1 -1
- package/dist/core/LogBody.d.ts +8 -1
- package/dist/core/LogBody.d.ts.map +1 -1
- package/dist/core/LogBody.js +44 -12
- package/dist/core/LogBody.js.map +1 -1
- package/dist/core/LogEntryProjection.d.ts +1 -0
- package/dist/core/LogEntryProjection.d.ts.map +1 -1
- package/dist/core/LogEntryProjection.js +12 -10
- package/dist/core/LogEntryProjection.js.map +1 -1
- package/dist/core/LogVisibility.d.ts +1 -0
- package/dist/core/LogVisibility.d.ts.map +1 -1
- package/dist/core/LogVisibility.js +3 -0
- package/dist/core/LogVisibility.js.map +1 -1
- package/dist/core/LogWriter.d.ts +2 -3
- package/dist/core/LogWriter.d.ts.map +1 -1
- package/dist/core/LogWriter.js +31 -36
- package/dist/core/LogWriter.js.map +1 -1
- package/dist/core/LogWriter.sql +23 -0
- package/dist/core/LoopDriver.d.ts +11 -8
- package/dist/core/LoopDriver.d.ts.map +1 -1
- package/dist/core/LoopDriver.js +161 -189
- package/dist/core/LoopDriver.js.map +1 -1
- package/dist/core/LoopDriver.sql +11 -0
- package/dist/core/LoopLifecycle.d.ts +32 -2
- package/dist/core/LoopLifecycle.d.ts.map +1 -1
- package/dist/core/LoopLifecycle.js +88 -4
- package/dist/core/LoopLifecycle.js.map +1 -1
- package/dist/core/LoopLifecycle.sql +145 -28
- package/dist/core/LoopPolicyReader.sql +6 -0
- package/dist/core/MembershipMaterialization.d.ts.map +1 -1
- package/dist/core/MembershipMaterialization.js +6 -28
- package/dist/core/MembershipMaterialization.js.map +1 -1
- package/dist/core/ModelCall.d.ts.map +1 -1
- package/dist/core/ModelCall.js +2 -6
- package/dist/core/ModelCall.js.map +1 -1
- package/dist/core/ModelCall.sql +41 -0
- package/dist/core/MutationEffects.d.ts +5 -3
- package/dist/core/MutationEffects.d.ts.map +1 -1
- package/dist/core/MutationEffects.js +10 -28
- package/dist/core/MutationEffects.js.map +1 -1
- package/dist/core/NativeContent.d.ts +6 -0
- package/dist/core/NativeContent.d.ts.map +1 -0
- package/dist/core/NativeContent.js +16 -0
- package/dist/core/NativeContent.js.map +1 -0
- package/dist/core/NativeContent.sql +6 -0
- package/dist/core/NoticeChannel.js +1 -1
- package/dist/core/NoticeChannel.js.map +1 -1
- package/dist/core/OperatorConfig.js +5 -5
- package/dist/core/OperatorConfig.js.map +1 -1
- package/dist/core/PacketBuilder.d.ts +8 -5
- package/dist/core/PacketBuilder.d.ts.map +1 -1
- package/dist/core/PacketBuilder.js +117 -81
- package/dist/core/PacketBuilder.js.map +1 -1
- package/dist/core/PacketBuilder.sql +146 -0
- package/dist/core/PatternSelection.d.ts +28 -0
- package/dist/core/PatternSelection.d.ts.map +1 -0
- package/dist/core/PatternSelection.js +42 -0
- package/dist/core/PatternSelection.js.map +1 -0
- package/dist/core/ProblemLog.d.ts.map +1 -1
- package/dist/core/ProblemLog.js +0 -1
- package/dist/core/ProblemLog.js.map +1 -1
- package/dist/core/PromptFrames.d.ts +12 -0
- package/dist/core/PromptFrames.d.ts.map +1 -0
- package/dist/core/PromptFrames.js +28 -0
- package/dist/core/PromptFrames.js.map +1 -0
- package/dist/core/ProposalLifecycle.d.ts +0 -1
- package/dist/core/ProposalLifecycle.d.ts.map +1 -1
- package/dist/core/ProposalLifecycle.js +26 -23
- package/dist/core/ProposalLifecycle.js.map +1 -1
- package/dist/core/ProposalLifecycle.sql +33 -0
- package/dist/core/ProviderInstantiate.d.ts +1 -1
- package/dist/core/ProviderInstantiate.d.ts.map +1 -1
- package/dist/core/ProviderInstantiate.js +7 -14
- package/dist/core/ProviderInstantiate.js.map +1 -1
- package/dist/core/ReasoningView.d.ts +9 -0
- package/dist/core/ReasoningView.d.ts.map +1 -0
- package/dist/core/ReasoningView.js +47 -0
- package/dist/core/ReasoningView.js.map +1 -0
- package/dist/core/ResourceBindings.d.ts +16 -0
- package/dist/core/ResourceBindings.d.ts.map +1 -0
- package/dist/core/ResourceBindings.js +45 -0
- package/dist/core/ResourceBindings.js.map +1 -0
- package/dist/core/ResourceMutations.d.ts +5 -8
- package/dist/core/ResourceMutations.d.ts.map +1 -1
- package/dist/core/ResourceMutations.js +6 -7
- package/dist/core/ResourceMutations.js.map +1 -1
- package/dist/core/ResourceSelector.d.ts +2 -2
- package/dist/core/ResourceSelector.d.ts.map +1 -1
- package/dist/core/ResourceSelector.js +122 -62
- package/dist/core/ResourceSelector.js.map +1 -1
- package/dist/core/ResourceTransfers.d.ts +4 -2
- package/dist/core/ResourceTransfers.d.ts.map +1 -1
- package/dist/core/ResourceTransfers.js +95 -26
- package/dist/core/ResourceTransfers.js.map +1 -1
- package/dist/core/RuntimeWorker.d.ts +5 -0
- package/dist/core/RuntimeWorker.d.ts.map +1 -0
- package/dist/core/RuntimeWorker.js +15 -0
- package/dist/core/RuntimeWorker.js.map +1 -0
- package/dist/core/RuntimeWorker.sql +11 -0
- package/dist/core/SchemeRegistry.d.ts +12 -16
- package/dist/core/SchemeRegistry.d.ts.map +1 -1
- package/dist/core/SchemeRegistry.js +59 -85
- package/dist/core/SchemeRegistry.js.map +1 -1
- package/dist/core/StoredPacket.d.ts +6 -1
- package/dist/core/StoredPacket.d.ts.map +1 -1
- package/dist/core/StoredPacket.js +30 -10
- package/dist/core/StoredPacket.js.map +1 -1
- package/dist/core/StrikeRail.d.ts +11 -8
- package/dist/core/StrikeRail.d.ts.map +1 -1
- package/dist/core/StrikeRail.js +63 -114
- package/dist/core/StrikeRail.js.map +1 -1
- package/dist/core/StrikeRail.sql +12 -0
- package/dist/core/TerminalResult.d.ts +1 -1
- package/dist/core/TerminalResult.d.ts.map +1 -1
- package/dist/core/TerminalResult.js +2 -2
- package/dist/core/TerminalResult.js.map +1 -1
- package/dist/core/TokenCalibration.d.ts +1 -6
- package/dist/core/TokenCalibration.d.ts.map +1 -1
- package/dist/core/TokenCalibration.js +13 -9
- package/dist/core/TokenCalibration.js.map +1 -1
- package/dist/core/TokenCalibration.sql +15 -0
- package/dist/core/ToolInputSchema.d.ts +6 -0
- package/dist/core/ToolInputSchema.d.ts.map +1 -0
- package/dist/core/ToolInputSchema.js +43 -0
- package/dist/core/ToolInputSchema.js.map +1 -0
- package/dist/core/ToolResources.d.ts.map +1 -1
- package/dist/core/ToolResources.js +77 -51
- package/dist/core/ToolResources.js.map +1 -1
- package/dist/core/Turn.d.ts +5 -2
- package/dist/core/Turn.d.ts.map +1 -1
- package/dist/core/Turn.js +13 -11
- package/dist/core/Turn.js.map +1 -1
- package/dist/core/Turn.sql +25 -39
- package/dist/core/{SendBroadcastHandler.d.ts → TurnDispositionHandler.d.ts} +24 -18
- package/dist/core/TurnDispositionHandler.d.ts.map +1 -0
- package/dist/core/TurnDispositionHandler.js +206 -0
- package/dist/core/TurnDispositionHandler.js.map +1 -0
- package/dist/core/TurnMaterialization.d.ts +2 -3
- package/dist/core/TurnMaterialization.d.ts.map +1 -1
- package/dist/core/TurnMaterialization.js +47 -24
- package/dist/core/TurnMaterialization.js.map +1 -1
- package/dist/core/TurnMaterialization.sql +44 -0
- package/dist/core/TurnOps.d.ts.map +1 -1
- package/dist/core/TurnOps.js +8 -64
- package/dist/core/TurnOps.js.map +1 -1
- package/dist/core/TurnRunner.d.ts +8 -15
- package/dist/core/TurnRunner.d.ts.map +1 -1
- package/dist/core/TurnRunner.js +1175 -1317
- package/dist/core/TurnRunner.js.map +1 -1
- package/dist/core/TurnRunner.sql +74 -0
- package/dist/core/TurnSources.sql +39 -0
- package/dist/core/WorkerControlAddress.d.ts +1 -0
- package/dist/core/WorkerControlAddress.d.ts.map +1 -1
- package/dist/core/WorkerControlAddress.js +5 -0
- package/dist/core/WorkerControlAddress.js.map +1 -1
- package/dist/core/WorkerControlHandler.d.ts +1 -3
- package/dist/core/WorkerControlHandler.d.ts.map +1 -1
- package/dist/core/WorkerControlHandler.js +64 -48
- package/dist/core/WorkerControlHandler.js.map +1 -1
- package/dist/core/WorkerName.d.ts +11 -12
- package/dist/core/WorkerName.d.ts.map +1 -1
- package/dist/core/WorkerName.js +40 -47
- package/dist/core/WorkerName.js.map +1 -1
- package/dist/core/WorkerName.sql +7 -10
- package/dist/core/WorkspaceGate.d.ts +1 -1
- package/dist/core/WorkspaceGate.d.ts.map +1 -1
- package/dist/core/WorkspaceGate.js +33 -10
- package/dist/core/WorkspaceGate.js.map +1 -1
- package/dist/core/ambient.sql +236 -0
- package/dist/core/attachments.d.ts +2 -1
- package/dist/core/attachments.d.ts.map +1 -1
- package/dist/core/attachments.js +5 -4
- package/dist/core/attachments.js.map +1 -1
- package/dist/core/caps/CapsResolve.d.ts +2 -3
- package/dist/core/caps/CapsResolve.d.ts.map +1 -1
- package/dist/core/caps/CapsResolve.js +5 -5
- package/dist/core/caps/CapsResolve.js.map +1 -1
- package/dist/core/caps/DbChannelCaps.d.ts +1 -1
- package/dist/core/caps/DbChannelCaps.d.ts.map +1 -1
- package/dist/core/caps/DbChannelCaps.js +4 -6
- package/dist/core/caps/DbChannelCaps.js.map +1 -1
- package/dist/core/caps/DbEntryCaps.d.ts +2 -1
- package/dist/core/caps/DbEntryCaps.d.ts.map +1 -1
- package/dist/core/caps/DbEntryCaps.js +11 -17
- package/dist/core/caps/DbEntryCaps.js.map +1 -1
- package/dist/core/caps/DbNotifyCaps.d.ts +1 -1
- package/dist/core/caps/DbNotifyCaps.d.ts.map +1 -1
- package/dist/core/caps/DbNotifyCaps.js +3 -5
- package/dist/core/caps/DbNotifyCaps.js.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 +1 -1
- package/dist/core/caps/DbSubscriptionCaps.d.ts.map +1 -1
- package/dist/core/caps/DbSubscriptionCaps.js +5 -7
- package/dist/core/caps/DbSubscriptionCaps.js.map +1 -1
- package/dist/core/caps/SchemeCtxImpl.d.ts +0 -2
- package/dist/core/caps/SchemeCtxImpl.d.ts.map +1 -1
- package/dist/core/caps/SchemeCtxImpl.js +4 -20
- package/dist/core/caps/SchemeCtxImpl.js.map +1 -1
- package/dist/core/env-catalog.d.ts +28 -0
- package/dist/core/env-catalog.d.ts.map +1 -0
- package/dist/core/env-catalog.js +99 -0
- package/dist/core/env-catalog.js.map +1 -0
- package/dist/core/env-defaults.d.ts.map +1 -1
- package/dist/core/env-defaults.js +4 -2
- package/dist/core/env-defaults.js.map +1 -1
- package/dist/core/file-materialization.d.ts +4 -1
- package/dist/core/file-materialization.d.ts.map +1 -1
- package/dist/core/file-materialization.js +15 -1
- package/dist/core/file-materialization.js.map +1 -1
- package/dist/core/fork.d.ts +1 -6
- package/dist/core/fork.d.ts.map +1 -1
- package/dist/core/fork.js +9 -153
- package/dist/core/fork.js.map +1 -1
- package/dist/core/fork.sql +162 -185
- 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 +39 -2
- package/dist/core/git-env.js.map +1 -1
- package/dist/core/git-membership.d.ts.map +1 -1
- package/dist/core/git-membership.js +64 -48
- 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 +26 -20
- package/dist/core/git-state.js.map +1 -1
- package/dist/core/glob_match.d.ts +4 -0
- package/dist/core/glob_match.d.ts.map +1 -0
- package/dist/core/glob_match.js +7 -0
- package/dist/core/glob_match.js.map +1 -0
- package/dist/core/maintenance.sql +6 -0
- package/dist/core/mutation-types.d.ts +7 -28
- package/dist/core/mutation-types.d.ts.map +1 -1
- package/dist/core/operation-target-groups.d.ts.map +1 -1
- package/dist/core/operation-target-groups.js +2 -1
- package/dist/core/operation-target-groups.js.map +1 -1
- package/dist/core/packet-inject.d.ts.map +1 -1
- package/dist/core/packet-inject.js +2 -3
- package/dist/core/packet-inject.js.map +1 -1
- package/dist/core/packet-wire.d.ts +8 -6
- package/dist/core/packet-wire.d.ts.map +1 -1
- package/dist/core/packet-wire.js +381 -388
- 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 +5 -12
- package/dist/core/plurnk-uri.js.map +1 -1
- package/dist/core/scheme-types.d.ts +3 -3
- package/dist/core/scheme-types.d.ts.map +1 -1
- package/dist/core/scheme-types.js.map +1 -1
- package/dist/core/sha256.d.ts +4 -0
- package/dist/core/sha256.d.ts.map +1 -0
- package/dist/core/sha256.js +6 -0
- package/dist/core/sha256.js.map +1 -0
- package/dist/core/teaching.js +1 -1
- package/dist/core/teaching.js.map +1 -1
- package/dist/core/turn-scheduler.d.ts.map +1 -1
- package/dist/core/turn-scheduler.js +5 -18
- package/dist/core/turn-scheduler.js.map +1 -1
- package/dist/core/turn-signals.d.ts +0 -6
- package/dist/core/turn-signals.d.ts.map +1 -1
- package/dist/core/turn-signals.js +1 -7
- package/dist/core/turn-signals.js.map +1 -1
- package/dist/core/worker-ops.sql +15 -22
- package/dist/core/workspace-settings.d.ts.map +1 -1
- package/dist/core/workspace-settings.js +18 -2
- package/dist/core/workspace-settings.js.map +1 -1
- package/dist/core/workspace-settings.sql +6 -0
- package/dist/digest/Digest.d.ts.map +1 -1
- package/dist/digest/Digest.js +30 -91
- package/dist/digest/Digest.js.map +1 -1
- package/dist/digest/DigestRender.d.ts +1 -0
- package/dist/digest/DigestRender.d.ts.map +1 -1
- package/dist/digest/DigestRender.js +58 -62
- package/dist/digest/DigestRender.js.map +1 -1
- package/dist/digest/digest-rows.d.ts +16 -32
- package/dist/digest/digest-rows.d.ts.map +1 -1
- package/dist/digest/digest.sql +54 -20
- package/dist/schemes/Exec.d.ts +6 -12
- package/dist/schemes/Exec.d.ts.map +1 -1
- package/dist/schemes/Exec.js +318 -215
- package/dist/schemes/Exec.js.map +1 -1
- package/dist/schemes/ExecOutputScheme.d.ts +8 -6
- package/dist/schemes/ExecOutputScheme.d.ts.map +1 -1
- package/dist/schemes/ExecOutputScheme.js +33 -61
- package/dist/schemes/ExecOutputScheme.js.map +1 -1
- package/dist/schemes/ExecScheduler.js +2 -2
- package/dist/schemes/ExecScheduler.js.map +1 -1
- package/dist/schemes/ExecutionInput.d.ts +12 -0
- package/dist/schemes/ExecutionInput.d.ts.map +1 -0
- package/dist/schemes/ExecutionInput.js +94 -0
- package/dist/schemes/ExecutionInput.js.map +1 -0
- package/dist/schemes/File.d.ts +5 -2
- package/dist/schemes/File.d.ts.map +1 -1
- package/dist/schemes/File.js +62 -91
- package/dist/schemes/File.js.map +1 -1
- package/dist/schemes/Log.d.ts.map +1 -1
- package/dist/schemes/Log.js +84 -79
- package/dist/schemes/Log.js.map +1 -1
- package/dist/schemes/Log.sql +183 -15
- package/dist/schemes/Prompt.d.ts.map +1 -1
- package/dist/schemes/Prompt.js +3 -12
- package/dist/schemes/Prompt.js.map +1 -1
- package/dist/schemes/QuestionTool.d.ts +5 -0
- package/dist/schemes/QuestionTool.d.ts.map +1 -1
- package/dist/schemes/QuestionTool.js +7 -15
- package/dist/schemes/QuestionTool.js.map +1 -1
- package/dist/schemes/Skill.d.ts +12 -7
- package/dist/schemes/Skill.d.ts.map +1 -1
- package/dist/schemes/Skill.js +149 -21
- package/dist/schemes/Skill.js.map +1 -1
- package/dist/schemes/TurnSource.d.ts +12 -0
- package/dist/schemes/TurnSource.d.ts.map +1 -0
- package/dist/schemes/TurnSource.js +117 -0
- package/dist/schemes/TurnSource.js.map +1 -0
- package/dist/schemes/Worker.d.ts +3 -3
- package/dist/schemes/Worker.d.ts.map +1 -1
- package/dist/schemes/Worker.js +61 -208
- package/dist/schemes/Worker.js.map +1 -1
- package/dist/schemes/_entry-crud.d.ts +12 -15
- package/dist/schemes/_entry-crud.d.ts.map +1 -1
- package/dist/schemes/_entry-crud.js +63 -63
- package/dist/schemes/_entry-crud.js.map +1 -1
- package/dist/schemes/_entry-crud.sql +159 -45
- package/dist/schemes/_entry-find.d.ts +1 -3
- package/dist/schemes/_entry-find.d.ts.map +1 -1
- package/dist/schemes/_entry-find.js +111 -112
- package/dist/schemes/_entry-find.js.map +1 -1
- package/dist/schemes/_entry-find.sql +22 -14
- package/dist/schemes/_entry-fts.d.ts +14 -0
- package/dist/schemes/_entry-fts.d.ts.map +1 -0
- package/dist/schemes/_entry-fts.js +82 -0
- package/dist/schemes/_entry-fts.js.map +1 -0
- package/dist/schemes/_entry-fts.sql +31 -0
- package/dist/schemes/_entry-graph.d.ts.map +1 -1
- package/dist/schemes/_entry-graph.js +6 -14
- package/dist/schemes/_entry-graph.js.map +1 -1
- package/dist/schemes/_entry-graph.sql +29 -44
- package/dist/schemes/_entry-manifest.d.ts +2 -1
- package/dist/schemes/_entry-manifest.d.ts.map +1 -1
- package/dist/schemes/_entry-manifest.js +20 -26
- package/dist/schemes/_entry-manifest.js.map +1 -1
- package/dist/schemes/_entry-manifest.sql +26 -0
- package/dist/schemes/_entry-ops.d.ts +3 -5
- package/dist/schemes/_entry-ops.d.ts.map +1 -1
- package/dist/schemes/_entry-ops.js +30 -43
- package/dist/schemes/_entry-ops.js.map +1 -1
- package/dist/schemes/_entry-ops.sql +5 -6
- package/dist/schemes/_entry-readable.d.ts +8 -0
- package/dist/schemes/_entry-readable.d.ts.map +1 -0
- package/dist/schemes/_entry-readable.js +38 -0
- package/dist/schemes/_entry-readable.js.map +1 -0
- package/dist/schemes/_entry-send.d.ts +1 -1
- package/dist/schemes/_entry-send.d.ts.map +1 -1
- package/dist/schemes/_entry-send.js +3 -3
- package/dist/schemes/_entry-send.js.map +1 -1
- package/dist/schemes/_search-index.d.ts +5 -3
- package/dist/schemes/_search-index.d.ts.map +1 -1
- package/dist/schemes/_search-index.js +169 -160
- package/dist/schemes/_search-index.js.map +1 -1
- package/dist/schemes/_search-index.sql +47 -0
- package/dist/schemes/exec-abort.js +1 -1
- package/dist/schemes/exec-abort.js.map +1 -1
- package/dist/schemes/exec-env.d.ts +3 -0
- package/dist/schemes/exec-env.d.ts.map +1 -1
- package/dist/schemes/exec-env.js +66 -15
- package/dist/schemes/exec-env.js.map +1 -1
- package/dist/schemes/exec-runtime.d.ts +1 -1
- package/dist/schemes/exec-runtime.d.ts.map +1 -1
- package/dist/schemes/exec-runtime.js +1 -1
- package/dist/schemes/exec-runtime.js.map +1 -1
- package/dist/server/ClientReads.d.ts +2 -2
- package/dist/server/ClientReads.d.ts.map +1 -1
- package/dist/server/ClientReads.js +7 -9
- package/dist/server/ClientReads.js.map +1 -1
- package/dist/server/Daemon.d.ts +15 -21
- package/dist/server/Daemon.d.ts.map +1 -1
- package/dist/server/Daemon.js +165 -168
- package/dist/server/Daemon.js.map +1 -1
- package/dist/server/DaemonModule.d.ts +29 -22
- package/dist/server/DaemonModule.d.ts.map +1 -1
- package/dist/server/DrainSupervisor.d.ts +8 -21
- package/dist/server/DrainSupervisor.d.ts.map +1 -1
- package/dist/server/DrainSupervisor.js +278 -306
- package/dist/server/DrainSupervisor.js.map +1 -1
- package/dist/server/EnvFunctionality.d.ts +43 -0
- package/dist/server/EnvFunctionality.d.ts.map +1 -0
- package/dist/server/EnvFunctionality.js +194 -0
- package/dist/server/EnvFunctionality.js.map +1 -0
- package/dist/server/Functionality.d.ts +12 -11
- package/dist/server/Functionality.d.ts.map +1 -1
- package/dist/server/Functionality.js +279 -142
- package/dist/server/Functionality.js.map +1 -1
- package/dist/server/FunctionalityManager.d.ts +5 -5
- package/dist/server/FunctionalityManager.d.ts.map +1 -1
- package/dist/server/FunctionalityManager.js +29 -57
- package/dist/server/FunctionalityManager.js.map +1 -1
- package/dist/server/MembersFunctionality.d.ts +5 -4
- package/dist/server/MembersFunctionality.d.ts.map +1 -1
- package/dist/server/MembersFunctionality.js +24 -38
- package/dist/server/MembersFunctionality.js.map +1 -1
- package/dist/server/PlurnkSkill.d.ts +11 -0
- package/dist/server/PlurnkSkill.d.ts.map +1 -0
- package/dist/server/PlurnkSkill.js +41 -0
- package/dist/server/PlurnkSkill.js.map +1 -0
- package/dist/server/Retention.d.ts +25 -0
- package/dist/server/Retention.d.ts.map +1 -0
- package/dist/server/Retention.js +57 -0
- package/dist/server/Retention.js.map +1 -0
- package/dist/server/Retention.sql +59 -0
- package/dist/server/ServiceModules.d.ts +5 -0
- package/dist/server/ServiceModules.d.ts.map +1 -0
- package/dist/server/ServiceModules.js +10 -0
- package/dist/server/ServiceModules.js.map +1 -0
- package/dist/server/SkillsFunctionality.d.ts +14 -19
- package/dist/server/SkillsFunctionality.d.ts.map +1 -1
- package/dist/server/SkillsFunctionality.js +102 -106
- package/dist/server/SkillsFunctionality.js.map +1 -1
- package/dist/server/WorkerModelResolver.d.ts +4 -0
- package/dist/server/WorkerModelResolver.d.ts.map +1 -1
- package/dist/server/WorkerModelResolver.js +72 -39
- package/dist/server/WorkerModelResolver.js.map +1 -1
- package/dist/server/WorkspaceCapabilities.d.ts +21 -0
- package/dist/server/WorkspaceCapabilities.d.ts.map +1 -0
- package/dist/server/{WorkerCapabilities.js → WorkspaceCapabilities.js} +40 -40
- package/dist/server/WorkspaceCapabilities.js.map +1 -0
- package/dist/server/WorkspaceResidency.d.ts +38 -0
- package/dist/server/WorkspaceResidency.d.ts.map +1 -0
- package/dist/server/WorkspaceResidency.js +226 -0
- package/dist/server/WorkspaceResidency.js.map +1 -0
- package/dist/server/client-input.d.ts +1 -4
- package/dist/server/client-input.d.ts.map +1 -1
- package/dist/server/client-input.js +5 -46
- package/dist/server/client-input.js.map +1 -1
- package/dist/server/dispatch-as-plurnk.d.ts.map +1 -1
- package/dist/server/dispatch-as-plurnk.js +4 -22
- package/dist/server/dispatch-as-plurnk.js.map +1 -1
- package/dist/server/drain.sql +66 -43
- package/dist/server/envelope.d.ts +8 -1
- package/dist/server/envelope.d.ts.map +1 -1
- package/dist/server/envelope.js +9 -19
- package/dist/server/envelope.js.map +1 -1
- package/dist/server/envelope.sql +49 -13
- package/dist/server/lifecycle-recovery.sql +18 -20
- package/dist/server/logEntry.d.ts +1 -1
- package/dist/server/logEntry.d.ts.map +1 -1
- package/dist/server/logEntry.js +4 -1
- package/dist/server/logEntry.js.map +1 -1
- package/dist/server/logEntry.sql +25 -1
- package/dist/server/loopDocs.d.ts +2 -2
- package/dist/server/loopDocs.d.ts.map +1 -1
- package/dist/server/loopDocs.js +38 -31
- package/dist/server/loopDocs.js.map +1 -1
- package/dist/server/loopDocs.sql +1 -3
- package/dist/server/model-catalog.d.ts.map +1 -1
- package/dist/server/model-catalog.js +2 -1
- package/dist/server/model-catalog.js.map +1 -1
- package/dist/server/model-route.d.ts +1 -1
- package/dist/server/model-route.d.ts.map +1 -1
- package/dist/server/model-route.js +4 -2
- package/dist/server/model-route.js.map +1 -1
- package/dist/server/seam-entry-read.sql +3 -4
- package/dist/server/seam-loop.sql +2 -9
- package/dist/server/workspace-capabilities.sql +64 -0
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +21 -18
- package/dist/service.js.map +1 -1
- package/docs/env.md +55 -0
- package/docs/members.md +83 -0
- package/docs/skills.md +50 -0
- package/migrations/001_workspaces.sql +53 -0
- package/migrations/002_workers.sql +198 -0
- package/migrations/003_loops.sql +326 -0
- package/migrations/004_inference.sql +401 -0
- package/migrations/005_entries.sql +215 -0
- package/migrations/006_log.sql +581 -0
- package/migrations/007_subscriptions.sql +175 -0
- package/migrations/008_interactions.sql +29 -0
- package/package.json +44 -41
- package/digest-sql/channel-dispositions/dispositions.sql +0 -15
- package/digest-sql/channel-state/state.sql +0 -6
- package/digest-sql/curation/curation.sql +0 -6
- package/digest-sql/derivations/derivations.sql +0 -4
- package/digest-sql/embeddings/embeddings.sql +0 -4
- package/digest-sql/entry-dispositions/dispositions.sql +0 -15
- package/digest-sql/entry-state/state.sql +0 -6
- package/digest-sql/token-counts/token-counts.sql +0 -2
- package/dist/core/EmbeddingCall.d.ts +0 -23
- package/dist/core/EmbeddingCall.d.ts.map +0 -1
- package/dist/core/EmbeddingCall.js +0 -149
- package/dist/core/EmbeddingCall.js.map +0 -1
- package/dist/core/OverflowTurn.d.ts +0 -11
- package/dist/core/OverflowTurn.d.ts.map +0 -1
- package/dist/core/OverflowTurn.js +0 -80
- package/dist/core/OverflowTurn.js.map +0 -1
- package/dist/core/Owner.d.ts +0 -8
- package/dist/core/Owner.d.ts.map +0 -1
- package/dist/core/Owner.js +0 -46
- package/dist/core/Owner.js.map +0 -1
- package/dist/core/SendBroadcastHandler.d.ts.map +0 -1
- package/dist/core/SendBroadcastHandler.js +0 -159
- package/dist/core/SendBroadcastHandler.js.map +0 -1
- package/dist/core/VectorPump.d.ts +0 -28
- package/dist/core/VectorPump.d.ts.map +0 -1
- package/dist/core/VectorPump.js +0 -130
- package/dist/core/VectorPump.js.map +0 -1
- package/dist/core/owner.sql +0 -11
- package/dist/core/worker-settings.d.ts +0 -10
- package/dist/core/worker-settings.d.ts.map +0 -1
- package/dist/core/worker-settings.js +0 -53
- package/dist/core/worker-settings.js.map +0 -1
- package/dist/schemes/_entry-chunk.d.ts +0 -14
- package/dist/schemes/_entry-chunk.d.ts.map +0 -1
- package/dist/schemes/_entry-chunk.js +0 -165
- package/dist/schemes/_entry-chunk.js.map +0 -1
- package/dist/schemes/_entry-semantic.d.ts +0 -63
- package/dist/schemes/_entry-semantic.d.ts.map +0 -1
- package/dist/schemes/_entry-semantic.js +0 -299
- package/dist/schemes/_entry-semantic.js.map +0 -1
- package/dist/schemes/_entry-semantic.sql +0 -99
- package/dist/schemes/cosine.d.ts +0 -4
- package/dist/schemes/cosine.d.ts.map +0 -1
- package/dist/schemes/cosine.js +0 -9
- package/dist/schemes/cosine.js.map +0 -1
- package/dist/server/WorkerCapabilities.d.ts +0 -21
- package/dist/server/WorkerCapabilities.d.ts.map +0 -1
- package/dist/server/WorkerCapabilities.js.map +0 -1
- package/dist/server/WorkerResidency.d.ts +0 -40
- package/dist/server/WorkerResidency.d.ts.map +0 -1
- package/dist/server/WorkerResidency.js +0 -283
- package/dist/server/WorkerResidency.js.map +0 -1
- package/dist/server/seam-log-read.sql +0 -21
- package/dist/server/worker-capabilities.sql +0 -28
- package/migrations/001_schema.sql +0 -2207
|
@@ -0,0 +1,581 @@
|
|
|
1
|
+
-- MIGRATE: 6 log
|
|
2
|
+
-- Chapter 6 of the schema baseline ({§db-schema-baseline}): The log: rows, their projections, curation effects, and the views the packet reads.
|
|
3
|
+
-- Version numbers order the chapters on a fresh database; they are not history. A shape
|
|
4
|
+
-- change edits the chapter in place; existing development databases are recreated.
|
|
5
|
+
|
|
6
|
+
-- log_entries
|
|
7
|
+
-- Chronological event store. sequence is 1-based, scoped to the turn —
|
|
8
|
+
-- resets at each new turn. URI-bit columns are unprefixed (scheme,
|
|
9
|
+
-- pathname, …). state/outcome/attrs carry the proposal lifecycle —
|
|
10
|
+
-- status⊥state: status is the HTTP outcome, state is where in the
|
|
11
|
+
-- lifecycle the entry sits. Most rows write 'resolved' directly;
|
|
12
|
+
-- proposing schemes transition 'proposed' → resolved/failed/cancelled.
|
|
13
|
+
-- initial_folded is the immutable visibility with which the event entered the
|
|
14
|
+
-- log. Current model-facing membership and folded intervals belong to
|
|
15
|
+
-- log_entry_projections below; curation never rewrites or removes this event.
|
|
16
|
+
CREATE TABLE IF NOT EXISTS log_entries (
|
|
17
|
+
id INTEGER NOT NULL PRIMARY KEY,
|
|
18
|
+
version INTEGER NOT NULL DEFAULT 0 CHECK (version >= 0),
|
|
19
|
+
|
|
20
|
+
worker_id INTEGER NOT NULL,
|
|
21
|
+
loop_id INTEGER NOT NULL,
|
|
22
|
+
turn_id INTEGER NOT NULL,
|
|
23
|
+
sequence INTEGER NOT NULL CHECK (sequence >= 1),
|
|
24
|
+
at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
25
|
+
origin TEXT NOT NULL CHECK (origin IN ('model', 'client', '_plurnk', 'plugin')),
|
|
26
|
+
-- {§env-delta-attribution}: a causal worker:// identity, log:/// operation
|
|
27
|
+
-- address, or stable subsystem token ('file'); NULL = the owning worker
|
|
28
|
+
-- itself, rendered without causal attribution.
|
|
29
|
+
source TEXT,
|
|
30
|
+
-- Engine-owned occurrence identity. Source rows are stamped NULL→id by the
|
|
31
|
+
-- journal trigger; observer and fork copies carry it at insertion.
|
|
32
|
+
ambient_event_id INTEGER REFERENCES ambient_events(id),
|
|
33
|
+
-- Fork history is copied evidence, never new activity. Rows with no source
|
|
34
|
+
-- occurrence still need this structural guard against republication.
|
|
35
|
+
inherited_history INTEGER NOT NULL DEFAULT 0 CHECK (inherited_history IN (0, 1)),
|
|
36
|
+
-- Search derivation attached to this durable log result, when available.
|
|
37
|
+
deep_hash TEXT REFERENCES derivations(deep_hash),
|
|
38
|
+
-- Exact logical provider call represented by a BARE result or rejected
|
|
39
|
+
-- emissionAttempt. Other operation and ambient
|
|
40
|
+
-- rows carry no model-call identity.
|
|
41
|
+
model_call_id INTEGER REFERENCES model_calls(id),
|
|
42
|
+
-- Engine-owned stream publication that produced this observation. The
|
|
43
|
+
-- publication cursor survives log curation; this relation is evidence,
|
|
44
|
+
-- never the acknowledgement itself. {§exec-stream}
|
|
45
|
+
subscription_publication_id INTEGER REFERENCES subscription_publications(id) ON DELETE SET NULL,
|
|
46
|
+
|
|
47
|
+
-- 'error' is an ACTIONLESS row ({§operation-results} — errors are log items): a parse failure that
|
|
48
|
+
-- produced no op still records a log entry (op='error', status_rx≥400, no target) so the model
|
|
49
|
+
-- can fold/kill/recall its own mistakes like any other log row — one budget surface, the log.
|
|
50
|
+
-- Rejected-attempt artifacts carry NULL here ({§rejected-emission-entry}).
|
|
51
|
+
-- No op enum here: the grammar op set is grammar's contract (PlurnkOp), and this column is written
|
|
52
|
+
-- only by the PlurnkOp-typed engine (grammar ops), service row selectors, or NULL for no op.
|
|
53
|
+
-- A SQL enum would be a hand-copy of grammar's op list that silently goes stale on every new verb
|
|
54
|
+
-- (it did — FORK/WORK). Validity lives at the parse + type layer, not duplicated in DDL.
|
|
55
|
+
op TEXT,
|
|
56
|
+
signal TEXT CHECK (signal IS NULL OR json_valid(signal)),
|
|
57
|
+
|
|
58
|
+
scheme TEXT CHECK (scheme IS NULL OR length(scheme) > 0),
|
|
59
|
+
username TEXT,
|
|
60
|
+
password TEXT,
|
|
61
|
+
hostname TEXT,
|
|
62
|
+
port INTEGER CHECK (port IS NULL OR (port BETWEEN 0 AND 65535)),
|
|
63
|
+
pathname TEXT,
|
|
64
|
+
-- Serialized query without '?'; NULL = absent, '' = explicit empty. {§path-query}
|
|
65
|
+
query TEXT,
|
|
66
|
+
fragment TEXT,
|
|
67
|
+
|
|
68
|
+
lineMarker TEXT CHECK (lineMarker IS NULL OR json_valid(lineMarker)),
|
|
69
|
+
|
|
70
|
+
tx TEXT NOT NULL,
|
|
71
|
+
mimetype_tx TEXT NOT NULL CHECK (length(mimetype_tx) > 0),
|
|
72
|
+
|
|
73
|
+
rx TEXT NOT NULL,
|
|
74
|
+
mimetype_rx TEXT NOT NULL CHECK (length(mimetype_rx) > 0),
|
|
75
|
+
status_rx INTEGER NOT NULL CHECK (status_rx BETWEEN 100 AND 599),
|
|
76
|
+
native_content_hash TEXT GENERATED ALWAYS AS (
|
|
77
|
+
CASE WHEN mimetype_rx = 'application/json' AND json_valid(rx)
|
|
78
|
+
THEN json_extract(rx, '$.nativeContentHash') END
|
|
79
|
+
) VIRTUAL REFERENCES native_contents(hash),
|
|
80
|
+
|
|
81
|
+
-- Complete canonical LogBody content before coordinate/presentation
|
|
82
|
+
-- projection; persistence envelopes do not contribute. {§tokenomics-weight-stored-at-write}
|
|
83
|
+
weight INTEGER NOT NULL DEFAULT 0 CHECK (weight >= 0),
|
|
84
|
+
|
|
85
|
+
state TEXT NOT NULL DEFAULT 'resolved'
|
|
86
|
+
CHECK (state IN ('proposed', 'resolved', 'failed', 'cancelled')),
|
|
87
|
+
outcome TEXT,
|
|
88
|
+
attrs TEXT NOT NULL DEFAULT '{}' CHECK (json_valid(attrs)),
|
|
89
|
+
|
|
90
|
+
initial_folded TEXT NOT NULL DEFAULT '[]'
|
|
91
|
+
CHECK (json_valid(initial_folded) AND json_type(initial_folded) = 'array'),
|
|
92
|
+
|
|
93
|
+
CHECK (
|
|
94
|
+
(op IS NULL) = COALESCE(
|
|
95
|
+
json_extract(attrs, '$.kind') = 'emissionAttempt',
|
|
96
|
+
0
|
|
97
|
+
)
|
|
98
|
+
),
|
|
99
|
+
CHECK (json_extract(attrs, '$.kind') != 'emissionAttempt' OR origin = 'model'),
|
|
100
|
+
|
|
101
|
+
FOREIGN KEY (worker_id) REFERENCES workers(id) ON DELETE CASCADE,
|
|
102
|
+
FOREIGN KEY (loop_id) REFERENCES loops(id) ON DELETE CASCADE,
|
|
103
|
+
FOREIGN KEY (turn_id) REFERENCES turns(id) ON DELETE CASCADE
|
|
104
|
+
) STRICT;
|
|
105
|
+
|
|
106
|
+
CREATE UNIQUE INDEX IF NOT EXISTS log_entries_turn_id_sequence ON log_entries (turn_id, sequence);
|
|
107
|
+
|
|
108
|
+
CREATE INDEX IF NOT EXISTS log_entries_worker_id ON log_entries (worker_id);
|
|
109
|
+
|
|
110
|
+
CREATE INDEX IF NOT EXISTS log_entries_loop_id ON log_entries (loop_id);
|
|
111
|
+
|
|
112
|
+
-- {§db-fk-indexes} Derivation replacement checks the rows that cite the hash.
|
|
113
|
+
CREATE INDEX IF NOT EXISTS log_entries_deep_hash ON log_entries (deep_hash) WHERE deep_hash IS NOT NULL;
|
|
114
|
+
|
|
115
|
+
-- {§loop-response-messages}: the response is the last delivered message, read from
|
|
116
|
+
-- executed evidence so curation cannot retract it. This projection is also used inside
|
|
117
|
+
-- atomic cancellation; no second response projection exists.
|
|
118
|
+
CREATE VIEW IF NOT EXISTS loop_responses AS
|
|
119
|
+
SELECT loop_id, content FROM (
|
|
120
|
+
SELECT le.loop_id,
|
|
121
|
+
json_extract(le.tx, '$.body.raw') AS content,
|
|
122
|
+
ROW_NUMBER() OVER (PARTITION BY le.loop_id ORDER BY t.sequence DESC, le.sequence DESC) AS recency
|
|
123
|
+
FROM log_entries le JOIN turns t ON t.id = le.turn_id
|
|
124
|
+
WHERE le.op = 'SEND' AND le.state = 'resolved' AND le.status_rx BETWEEN 200 AND 299
|
|
125
|
+
AND le.source IS NULL AND le.inherited_history = 0
|
|
126
|
+
AND json_valid(le.tx)
|
|
127
|
+
-- {§send-prompt-acceptance}: a SEND to one of this loop's own prompts is the response too;
|
|
128
|
+
-- the dispatcher admits only own-loop prompt addresses, so the scheme alone identifies them.
|
|
129
|
+
AND (json_type(le.tx, '$.target') = 'null' OR json_extract(le.tx, '$.target.scheme') = 'prompt')
|
|
130
|
+
AND json_type(le.tx, '$.body.raw') = 'text'
|
|
131
|
+
AND length(json_extract(le.tx, '$.body.raw')) > 0
|
|
132
|
+
)
|
|
133
|
+
WHERE recency = 1;
|
|
134
|
+
|
|
135
|
+
CREATE UNIQUE INDEX IF NOT EXISTS log_entries_model_call_id
|
|
136
|
+
ON log_entries (model_call_id)
|
|
137
|
+
WHERE model_call_id IS NOT NULL;
|
|
138
|
+
|
|
139
|
+
CREATE INDEX IF NOT EXISTS log_entries_subscription_publication_id
|
|
140
|
+
ON log_entries (subscription_publication_id)
|
|
141
|
+
WHERE subscription_publication_id IS NOT NULL;
|
|
142
|
+
|
|
143
|
+
CREATE UNIQUE INDEX IF NOT EXISTS log_entries_worker_ambient_event
|
|
144
|
+
ON log_entries (worker_id, ambient_event_id)
|
|
145
|
+
WHERE ambient_event_id IS NOT NULL;
|
|
146
|
+
|
|
147
|
+
-- {§log-history-projection} — log_entries is append-only execution evidence;
|
|
148
|
+
-- this one-to-one row is the current model-facing projection of that evidence.
|
|
149
|
+
-- KILL is a terminal active→inactive transition. Scoped KILL mutates only folded
|
|
150
|
+
-- intervals while active. The initial state is created in the same statement as
|
|
151
|
+
-- its event so no durable row can exist without one projection state.
|
|
152
|
+
CREATE TABLE IF NOT EXISTS log_entry_projections (
|
|
153
|
+
log_entry_id INTEGER NOT NULL PRIMARY KEY,
|
|
154
|
+
active INTEGER NOT NULL DEFAULT 1 CHECK (active IN (0, 1)),
|
|
155
|
+
folded TEXT NOT NULL DEFAULT '[]'
|
|
156
|
+
CHECK (json_valid(folded) AND json_type(folded) = 'array'),
|
|
157
|
+
output_admission_turn_id INTEGER,
|
|
158
|
+
output_withheld INTEGER NOT NULL DEFAULT 0 CHECK (output_withheld IN (0, 1)),
|
|
159
|
+
CHECK (output_withheld = 0 OR output_admission_turn_id IS NOT NULL),
|
|
160
|
+
FOREIGN KEY (output_admission_turn_id) REFERENCES turns(id),
|
|
161
|
+
FOREIGN KEY (log_entry_id) REFERENCES log_entries(id) ON DELETE CASCADE
|
|
162
|
+
) STRICT, WITHOUT ROWID;
|
|
163
|
+
|
|
164
|
+
-- {§db-fk-indexes} Opening a turn checks admissions that cite a turn; without this every projection row is read.
|
|
165
|
+
CREATE INDEX IF NOT EXISTS log_entry_projections_output_admission_turn ON log_entry_projections (output_admission_turn_id) WHERE output_admission_turn_id IS NOT NULL;
|
|
166
|
+
|
|
167
|
+
-- {§context-output-selection} Admission is a durable projection decision, not
|
|
168
|
+
-- deletion or proof of provider delivery. It cannot be reset to replay output.
|
|
169
|
+
CREATE TRIGGER IF NOT EXISTS log_output_admission_immutable
|
|
170
|
+
BEFORE UPDATE OF output_admission_turn_id, output_withheld ON log_entry_projections
|
|
171
|
+
WHEN OLD.output_admission_turn_id IS NOT NULL AND (
|
|
172
|
+
NEW.output_admission_turn_id IS NOT OLD.output_admission_turn_id
|
|
173
|
+
OR NEW.output_withheld != OLD.output_withheld
|
|
174
|
+
)
|
|
175
|
+
BEGIN
|
|
176
|
+
SELECT RAISE(ABORT, 'log output admission is immutable');
|
|
177
|
+
END;
|
|
178
|
+
|
|
179
|
+
CREATE TRIGGER IF NOT EXISTS log_output_admission_owner
|
|
180
|
+
BEFORE UPDATE OF output_admission_turn_id ON log_entry_projections
|
|
181
|
+
WHEN NEW.output_admission_turn_id IS NOT NULL AND NOT EXISTS (
|
|
182
|
+
SELECT 1 FROM turns turn
|
|
183
|
+
JOIN loops loop ON loop.id = turn.loop_id
|
|
184
|
+
JOIN log_entries entry ON entry.worker_id = loop.worker_id
|
|
185
|
+
WHERE turn.id = NEW.output_admission_turn_id AND entry.id = NEW.log_entry_id
|
|
186
|
+
)
|
|
187
|
+
BEGIN
|
|
188
|
+
SELECT RAISE(ABORT, 'log output admission must belong to its worker');
|
|
189
|
+
END;
|
|
190
|
+
|
|
191
|
+
-- The ordinary operation surface reads this view. Forensic and lifecycle
|
|
192
|
+
-- machinery names log_entries directly and therefore retains complete history.
|
|
193
|
+
CREATE VIEW IF NOT EXISTS active_log_entries AS
|
|
194
|
+
SELECT le.id, le.version, le.worker_id, le.loop_id, le.turn_id, le.sequence,
|
|
195
|
+
le.at, le.origin, le.source, le.ambient_event_id, le.inherited_history,
|
|
196
|
+
le.deep_hash, le.model_call_id, le.subscription_publication_id,
|
|
197
|
+
le.op, le.signal, le.scheme, le.username, le.password,
|
|
198
|
+
le.hostname, le.port, le.pathname, le.query, le.fragment, le.lineMarker,
|
|
199
|
+
le.tx, le.mimetype_tx,
|
|
200
|
+
le.rx, le.mimetype_rx, le.status_rx, le.weight,
|
|
201
|
+
le.state, le.outcome, le.attrs, le.initial_folded, projection.folded,
|
|
202
|
+
projection.output_admission_turn_id, projection.output_withheld
|
|
203
|
+
FROM log_entries le
|
|
204
|
+
JOIN log_entry_projections projection ON projection.log_entry_id = le.id
|
|
205
|
+
WHERE projection.active = 1;
|
|
206
|
+
|
|
207
|
+
-- Individual execution events are append-only. Containing-history teardown is
|
|
208
|
+
-- the one removal owner: a cascading delete has already removed at least one
|
|
209
|
+
-- ancestor in the workspace→worker→loop→turn chain. A direct row delete while
|
|
210
|
+
-- that complete owner chain remains would fabricate chronology and is rejected.
|
|
211
|
+
CREATE TRIGGER IF NOT EXISTS log_entries_delete_with_owner_only
|
|
212
|
+
BEFORE DELETE ON log_entries
|
|
213
|
+
WHEN EXISTS (
|
|
214
|
+
SELECT 1
|
|
215
|
+
FROM turns
|
|
216
|
+
JOIN loops ON loops.id = turns.loop_id
|
|
217
|
+
JOIN workers ON workers.id = loops.worker_id
|
|
218
|
+
JOIN workspaces ON workspaces.id = workers.workspace_id
|
|
219
|
+
WHERE turns.id = OLD.turn_id
|
|
220
|
+
)
|
|
221
|
+
BEGIN
|
|
222
|
+
SELECT RAISE(ABORT, 'log entries can only be removed with their containing history');
|
|
223
|
+
END;
|
|
224
|
+
|
|
225
|
+
-- A log row belongs to one exact worker/loop/turn chain. Its writer is either
|
|
226
|
+
-- that turn's producer or `_plurnk` observing the turn. Primitive absence,
|
|
227
|
+
-- enum, and foreign-key failures remain owned by their column constraints.
|
|
228
|
+
CREATE TRIGGER IF NOT EXISTS log_entries_turn_ownership
|
|
229
|
+
BEFORE INSERT ON log_entries
|
|
230
|
+
WHEN NEW.worker_id IS NOT NULL
|
|
231
|
+
AND NEW.loop_id IS NOT NULL
|
|
232
|
+
AND NEW.turn_id IS NOT NULL
|
|
233
|
+
AND NEW.origin IN ('model', 'client', '_plurnk', 'plugin')
|
|
234
|
+
AND EXISTS (SELECT 1 FROM workers WHERE id = NEW.worker_id)
|
|
235
|
+
AND EXISTS (SELECT 1 FROM loops WHERE id = NEW.loop_id)
|
|
236
|
+
AND EXISTS (SELECT 1 FROM turns WHERE id = NEW.turn_id)
|
|
237
|
+
AND NOT EXISTS (
|
|
238
|
+
SELECT 1
|
|
239
|
+
FROM turns
|
|
240
|
+
JOIN loops ON loops.id = turns.loop_id
|
|
241
|
+
WHERE turns.id = NEW.turn_id
|
|
242
|
+
AND loops.id = NEW.loop_id
|
|
243
|
+
AND loops.worker_id = NEW.worker_id
|
|
244
|
+
AND (NEW.origin = turns.producer OR NEW.origin = '_plurnk')
|
|
245
|
+
)
|
|
246
|
+
BEGIN
|
|
247
|
+
SELECT RAISE(ABORT, 'log entry must match its turn ownership and producer');
|
|
248
|
+
END;
|
|
249
|
+
|
|
250
|
+
-- A folded interval is an inclusive [start,end] pair. Ranges are positive,
|
|
251
|
+
-- sorted, disjoint, and non-adjacent; -1 is the final open-ended endpoint.
|
|
252
|
+
-- Canonical intervals make visibility equality and curation effects exact.
|
|
253
|
+
CREATE TRIGGER IF NOT EXISTS log_entry_projections_folded_valid_insert
|
|
254
|
+
BEFORE INSERT ON log_entry_projections
|
|
255
|
+
WHEN EXISTS (
|
|
256
|
+
SELECT 1
|
|
257
|
+
FROM json_each(NEW.folded) range
|
|
258
|
+
WHERE range.type != 'array'
|
|
259
|
+
OR json_array_length(range.value) != 2
|
|
260
|
+
OR COALESCE(json_type(range.value, '$[0]'), '') != 'integer'
|
|
261
|
+
OR COALESCE(json_type(range.value, '$[1]'), '') != 'integer'
|
|
262
|
+
OR json_extract(range.value, '$[0]') < 1
|
|
263
|
+
OR (
|
|
264
|
+
json_extract(range.value, '$[1]') != -1
|
|
265
|
+
AND json_extract(range.value, '$[1]') < json_extract(range.value, '$[0]')
|
|
266
|
+
)
|
|
267
|
+
OR EXISTS (
|
|
268
|
+
SELECT 1
|
|
269
|
+
FROM json_each(NEW.folded) previous
|
|
270
|
+
WHERE previous.key = range.key - 1
|
|
271
|
+
AND (
|
|
272
|
+
json_extract(previous.value, '$[1]') = -1
|
|
273
|
+
OR json_extract(range.value, '$[0]') <= json_extract(previous.value, '$[1]') + 1
|
|
274
|
+
)
|
|
275
|
+
)
|
|
276
|
+
)
|
|
277
|
+
BEGIN
|
|
278
|
+
SELECT RAISE(ABORT, 'log entry projection folded ranges are invalid');
|
|
279
|
+
END;
|
|
280
|
+
|
|
281
|
+
CREATE TRIGGER IF NOT EXISTS log_entry_projections_folded_valid_update
|
|
282
|
+
BEFORE UPDATE OF folded ON log_entry_projections
|
|
283
|
+
WHEN EXISTS (
|
|
284
|
+
SELECT 1
|
|
285
|
+
FROM json_each(NEW.folded) range
|
|
286
|
+
WHERE range.type != 'array'
|
|
287
|
+
OR json_array_length(range.value) != 2
|
|
288
|
+
OR COALESCE(json_type(range.value, '$[0]'), '') != 'integer'
|
|
289
|
+
OR COALESCE(json_type(range.value, '$[1]'), '') != 'integer'
|
|
290
|
+
OR json_extract(range.value, '$[0]') < 1
|
|
291
|
+
OR (
|
|
292
|
+
json_extract(range.value, '$[1]') != -1
|
|
293
|
+
AND json_extract(range.value, '$[1]') < json_extract(range.value, '$[0]')
|
|
294
|
+
)
|
|
295
|
+
OR EXISTS (
|
|
296
|
+
SELECT 1
|
|
297
|
+
FROM json_each(NEW.folded) previous
|
|
298
|
+
WHERE previous.key = range.key - 1
|
|
299
|
+
AND (
|
|
300
|
+
json_extract(previous.value, '$[1]') = -1
|
|
301
|
+
OR json_extract(range.value, '$[0]') <= json_extract(previous.value, '$[1]') + 1
|
|
302
|
+
)
|
|
303
|
+
)
|
|
304
|
+
)
|
|
305
|
+
BEGIN
|
|
306
|
+
SELECT RAISE(ABORT, 'log entry projection folded ranges are invalid');
|
|
307
|
+
END;
|
|
308
|
+
|
|
309
|
+
CREATE TRIGGER IF NOT EXISTS log_entry_projections_kill_terminal
|
|
310
|
+
BEFORE UPDATE OF active ON log_entry_projections
|
|
311
|
+
WHEN OLD.active = 0 AND NEW.active != 0
|
|
312
|
+
BEGIN
|
|
313
|
+
SELECT RAISE(ABORT, 'a killed log entry cannot re-enter the active projection');
|
|
314
|
+
END;
|
|
315
|
+
|
|
316
|
+
CREATE TRIGGER IF NOT EXISTS log_entry_projections_delete_with_event_only
|
|
317
|
+
BEFORE DELETE ON log_entry_projections
|
|
318
|
+
WHEN EXISTS (SELECT 1 FROM log_entries WHERE id = OLD.log_entry_id)
|
|
319
|
+
BEGIN
|
|
320
|
+
SELECT RAISE(ABORT, 'a durable log event must retain its projection');
|
|
321
|
+
END;
|
|
322
|
+
|
|
323
|
+
CREATE TRIGGER IF NOT EXISTS log_entries_model_call_valid
|
|
324
|
+
BEFORE INSERT ON log_entries
|
|
325
|
+
WHEN NEW.model_call_id IS NOT NULL
|
|
326
|
+
AND NOT EXISTS (
|
|
327
|
+
SELECT 1
|
|
328
|
+
FROM model_calls call
|
|
329
|
+
JOIN inference_calls inference ON inference.id = call.id
|
|
330
|
+
WHERE call.id = NEW.model_call_id
|
|
331
|
+
AND inference.turn_id = NEW.turn_id
|
|
332
|
+
AND inference.state != 'pending'
|
|
333
|
+
AND (
|
|
334
|
+
(inference.kind = 'bare' AND NEW.op = 'BARE')
|
|
335
|
+
OR (
|
|
336
|
+
inference.kind = 'emission'
|
|
337
|
+
AND NEW.op IS NULL
|
|
338
|
+
AND json_extract(NEW.attrs, '$.kind') = 'emissionAttempt'
|
|
339
|
+
)
|
|
340
|
+
)
|
|
341
|
+
)
|
|
342
|
+
BEGIN
|
|
343
|
+
SELECT RAISE(ABORT, 'log entry model call does not match its represented result');
|
|
344
|
+
END;
|
|
345
|
+
|
|
346
|
+
-- Successful log-KILL rows are durable curation events even though
|
|
347
|
+
-- their ordinary packet projection is suppressed. Preserve the exact selected
|
|
348
|
+
-- set and each target's before/after projection so a broad selector never
|
|
349
|
+
-- collapses into the lossy fact `matched: N`.
|
|
350
|
+
CREATE TABLE IF NOT EXISTS log_curation_effects (
|
|
351
|
+
operation_log_entry_id INTEGER NOT NULL,
|
|
352
|
+
target_log_entry_id INTEGER NOT NULL,
|
|
353
|
+
active_before INTEGER NOT NULL CHECK (active_before IN (0, 1)),
|
|
354
|
+
active_after INTEGER NOT NULL CHECK (active_after IN (0, 1)),
|
|
355
|
+
folded_before TEXT NOT NULL
|
|
356
|
+
CHECK (json_valid(folded_before) AND json_type(folded_before) = 'array'),
|
|
357
|
+
folded_after TEXT NOT NULL
|
|
358
|
+
CHECK (json_valid(folded_after) AND json_type(folded_after) = 'array'),
|
|
359
|
+
PRIMARY KEY (operation_log_entry_id, target_log_entry_id),
|
|
360
|
+
CHECK (operation_log_entry_id != target_log_entry_id),
|
|
361
|
+
FOREIGN KEY (operation_log_entry_id) REFERENCES log_entries(id) ON DELETE CASCADE,
|
|
362
|
+
FOREIGN KEY (target_log_entry_id) REFERENCES log_entries(id) ON DELETE CASCADE
|
|
363
|
+
) STRICT, WITHOUT ROWID;
|
|
364
|
+
|
|
365
|
+
CREATE INDEX IF NOT EXISTS log_curation_effects_target
|
|
366
|
+
ON log_curation_effects (target_log_entry_id);
|
|
367
|
+
|
|
368
|
+
-- Curation effects are append-only execution evidence. They may disappear
|
|
369
|
+
-- only when either referenced event is already being removed with its
|
|
370
|
+
-- containing history; direct mutation while both events survive is forbidden.
|
|
371
|
+
CREATE TRIGGER IF NOT EXISTS log_curation_effects_immutable
|
|
372
|
+
BEFORE UPDATE ON log_curation_effects
|
|
373
|
+
BEGIN
|
|
374
|
+
SELECT RAISE(ABORT, 'log curation effects are immutable execution evidence');
|
|
375
|
+
END;
|
|
376
|
+
|
|
377
|
+
CREATE TRIGGER IF NOT EXISTS log_curation_effects_delete_with_history_only
|
|
378
|
+
BEFORE DELETE ON log_curation_effects
|
|
379
|
+
WHEN EXISTS (
|
|
380
|
+
SELECT 1 FROM log_entries WHERE id = OLD.operation_log_entry_id
|
|
381
|
+
)
|
|
382
|
+
AND EXISTS (
|
|
383
|
+
SELECT 1 FROM log_entries WHERE id = OLD.target_log_entry_id
|
|
384
|
+
)
|
|
385
|
+
BEGIN
|
|
386
|
+
SELECT RAISE(ABORT, 'log curation effects can only be removed with their containing history');
|
|
387
|
+
END;
|
|
388
|
+
|
|
389
|
+
-- Make an invalid curation record structurally unavailable: the event must be
|
|
390
|
+
-- one successful log-KILL row, both rows must belong to the same
|
|
391
|
+
-- worker, and its state transition must match that op.
|
|
392
|
+
CREATE TRIGGER IF NOT EXISTS log_curation_effects_valid
|
|
393
|
+
BEFORE INSERT ON log_curation_effects
|
|
394
|
+
BEGIN
|
|
395
|
+
SELECT CASE WHEN
|
|
396
|
+
NOT EXISTS (
|
|
397
|
+
SELECT 1
|
|
398
|
+
FROM log_entries operation
|
|
399
|
+
JOIN log_entries target ON target.id = NEW.target_log_entry_id
|
|
400
|
+
WHERE operation.id = NEW.operation_log_entry_id
|
|
401
|
+
AND operation.op = 'KILL'
|
|
402
|
+
AND operation.status_rx < 400
|
|
403
|
+
AND operation.worker_id = target.worker_id
|
|
404
|
+
)
|
|
405
|
+
OR NOT EXISTS (
|
|
406
|
+
-- {§log-kill-scope} — a scoped KILL keeps the row active and changes its visibility;
|
|
407
|
+
-- a whole KILL retires it with its visibility untouched.
|
|
408
|
+
SELECT 1
|
|
409
|
+
FROM log_entries operation
|
|
410
|
+
WHERE operation.id = NEW.operation_log_entry_id
|
|
411
|
+
AND operation.op = 'KILL'
|
|
412
|
+
AND operation.scheme = 'log'
|
|
413
|
+
AND NEW.active_before = 1
|
|
414
|
+
AND (
|
|
415
|
+
NEW.active_after = 1
|
|
416
|
+
OR (
|
|
417
|
+
NEW.active_after = 0
|
|
418
|
+
AND json(NEW.folded_before) = json(NEW.folded_after)
|
|
419
|
+
)
|
|
420
|
+
)
|
|
421
|
+
)
|
|
422
|
+
OR EXISTS (
|
|
423
|
+
SELECT 1
|
|
424
|
+
FROM (
|
|
425
|
+
SELECT 'before' AS side, key, value, type FROM json_each(NEW.folded_before)
|
|
426
|
+
UNION ALL
|
|
427
|
+
SELECT 'after' AS side, key, value, type FROM json_each(NEW.folded_after)
|
|
428
|
+
) range
|
|
429
|
+
WHERE range.type != 'array'
|
|
430
|
+
OR json_array_length(range.value) != 2
|
|
431
|
+
OR COALESCE(json_type(range.value, '$[0]'), '') != 'integer'
|
|
432
|
+
OR COALESCE(json_type(range.value, '$[1]'), '') != 'integer'
|
|
433
|
+
OR json_extract(range.value, '$[0]') < 1
|
|
434
|
+
OR (
|
|
435
|
+
json_extract(range.value, '$[1]') != -1
|
|
436
|
+
AND json_extract(range.value, '$[1]') < json_extract(range.value, '$[0]')
|
|
437
|
+
)
|
|
438
|
+
OR EXISTS (
|
|
439
|
+
SELECT 1
|
|
440
|
+
FROM (
|
|
441
|
+
SELECT key, value FROM json_each(
|
|
442
|
+
CASE range.side
|
|
443
|
+
WHEN 'before' THEN NEW.folded_before
|
|
444
|
+
ELSE NEW.folded_after
|
|
445
|
+
END
|
|
446
|
+
)
|
|
447
|
+
) previous
|
|
448
|
+
WHERE previous.key = range.key - 1
|
|
449
|
+
AND (
|
|
450
|
+
json_extract(previous.value, '$[1]') = -1
|
|
451
|
+
OR json_extract(range.value, '$[0]') <= json_extract(previous.value, '$[1]') + 1
|
|
452
|
+
)
|
|
453
|
+
)
|
|
454
|
+
)
|
|
455
|
+
THEN RAISE(ABORT, 'invalid log curation effect') END;
|
|
456
|
+
END;
|
|
457
|
+
|
|
458
|
+
-- The dispatcher binds an exact, transient curation plan into attrs on the
|
|
459
|
+
-- successful log-KILL row. No other row may carry that payload.
|
|
460
|
+
CREATE TRIGGER IF NOT EXISTS log_entries_curation_payload_valid
|
|
461
|
+
BEFORE INSERT ON log_entries
|
|
462
|
+
WHEN json_type(NEW.attrs, '$.__plurnk_curation') IS NOT NULL
|
|
463
|
+
AND NOT (
|
|
464
|
+
NEW.op = 'KILL'
|
|
465
|
+
AND NEW.status_rx < 400
|
|
466
|
+
AND NEW.scheme = 'log'
|
|
467
|
+
AND json_type(NEW.attrs, '$.__plurnk_curation') = 'object'
|
|
468
|
+
)
|
|
469
|
+
BEGIN
|
|
470
|
+
SELECT RAISE(ABORT, 'private log curation payload requires a successful log curation row');
|
|
471
|
+
END;
|
|
472
|
+
|
|
473
|
+
-- Column-scoped immutability: the original action's identity, target, and
|
|
474
|
+
-- initial projection never change. Proposal lifecycle may mutate its outcome;
|
|
475
|
+
-- curation state lives outside the event row. Keep attrs separate so the
|
|
476
|
+
-- curation trigger's private-payload removal cannot exempt other columns.
|
|
477
|
+
CREATE TRIGGER IF NOT EXISTS log_entries_immutable_core
|
|
478
|
+
BEFORE UPDATE OF
|
|
479
|
+
worker_id, loop_id, turn_id, sequence, at, origin, source, inherited_history, model_call_id,
|
|
480
|
+
op, signal,
|
|
481
|
+
scheme, username, password, hostname,
|
|
482
|
+
port, pathname, query, fragment,
|
|
483
|
+
lineMarker, tx, mimetype_tx, mimetype_rx, initial_folded
|
|
484
|
+
ON log_entries
|
|
485
|
+
BEGIN
|
|
486
|
+
SELECT RAISE(ABORT, 'log_entries core fields are immutable; only lifecycle outcome and derived attachments may change');
|
|
487
|
+
END;
|
|
488
|
+
|
|
489
|
+
CREATE TRIGGER IF NOT EXISTS log_entries_immutable_attrs
|
|
490
|
+
BEFORE UPDATE OF attrs ON log_entries
|
|
491
|
+
WHEN COALESCE((
|
|
492
|
+
json_type(OLD.attrs, '$.__plurnk_curation') = 'object'
|
|
493
|
+
AND NEW.attrs = json_remove(OLD.attrs, '$.__plurnk_curation')
|
|
494
|
+
), 0) = 0
|
|
495
|
+
BEGIN
|
|
496
|
+
SELECT RAISE(ABORT, 'log_entries attrs are immutable outside curation payload removal');
|
|
497
|
+
END;
|
|
498
|
+
|
|
499
|
+
-- The engine may stamp an originating row exactly once. No later reassignment
|
|
500
|
+
-- can sever or counterfeit the occurrence identity.
|
|
501
|
+
CREATE TRIGGER IF NOT EXISTS log_entries_ambient_event_once
|
|
502
|
+
BEFORE UPDATE OF ambient_event_id ON log_entries
|
|
503
|
+
WHEN NOT (OLD.ambient_event_id IS NULL AND NEW.ambient_event_id IS NOT NULL)
|
|
504
|
+
BEGIN
|
|
505
|
+
SELECT RAISE(ABORT, 'log_entries ambient event identity may only be assigned once');
|
|
506
|
+
END;
|
|
507
|
+
|
|
508
|
+
-- One relational projection owns activity eligibility, audience, and snapshot
|
|
509
|
+
-- shape for both immediately-final and proposal-settlement paths.
|
|
510
|
+
CREATE VIEW IF NOT EXISTS ambient_activity_candidates AS
|
|
511
|
+
SELECT *
|
|
512
|
+
FROM (
|
|
513
|
+
SELECT w.workspace_id,
|
|
514
|
+
le.worker_id AS producer_worker_id,
|
|
515
|
+
-- {§env-delta-child-activity} — the runtime's own materialization (turn-0
|
|
516
|
+
-- initialization, doc-reconciliation maintenance, operation batches) is
|
|
517
|
+
-- private to the worker it serves and never crosses to the parent.
|
|
518
|
+
CASE
|
|
519
|
+
WHEN t.producer = '_plurnk' AND t.kind IN ('operation', 'initialization', 'maintenance') THEN NULL
|
|
520
|
+
ELSE w.parent_worker_id
|
|
521
|
+
END AS target_parent_worker_id,
|
|
522
|
+
CASE
|
|
523
|
+
WHEN le.state = 'resolved'
|
|
524
|
+
AND NOT (t.producer = '_plurnk' AND t.kind = 'maintenance')
|
|
525
|
+
AND le.status_rx BETWEEN 200 AND 399
|
|
526
|
+
AND le.status_rx != 304
|
|
527
|
+
AND (
|
|
528
|
+
(
|
|
529
|
+
le.op IN ('EDIT', 'KILL')
|
|
530
|
+
AND le.scheme = 'worker'
|
|
531
|
+
AND le.hostname IS NULL
|
|
532
|
+
AND le.pathname IS NOT NULL
|
|
533
|
+
)
|
|
534
|
+
OR (
|
|
535
|
+
le.op IN ('COPY', 'MOVE')
|
|
536
|
+
AND json_valid(le.rx)
|
|
537
|
+
AND EXISTS (
|
|
538
|
+
SELECT 1 FROM json_each(le.rx, '$.effects') effect
|
|
539
|
+
WHERE json_type(effect.value) = 'object'
|
|
540
|
+
AND substr(CAST(json_extract(effect.value, '$.target') AS TEXT), 1, 10) = 'worker:///'
|
|
541
|
+
)
|
|
542
|
+
)
|
|
543
|
+
)
|
|
544
|
+
THEN 1 ELSE 0
|
|
545
|
+
END AS workspace_broadcast,
|
|
546
|
+
le.id AS source_record_id,
|
|
547
|
+
le.at,
|
|
548
|
+
le.source,
|
|
549
|
+
le.op,
|
|
550
|
+
le.signal,
|
|
551
|
+
le.scheme,
|
|
552
|
+
le.username,
|
|
553
|
+
le.password,
|
|
554
|
+
le.hostname,
|
|
555
|
+
le.port,
|
|
556
|
+
le.pathname,
|
|
557
|
+
le.query,
|
|
558
|
+
le.fragment,
|
|
559
|
+
le.lineMarker AS line_marker,
|
|
560
|
+
le.tx,
|
|
561
|
+
le.mimetype_tx,
|
|
562
|
+
le.rx,
|
|
563
|
+
le.mimetype_rx,
|
|
564
|
+
le.status_rx,
|
|
565
|
+
le.state,
|
|
566
|
+
le.outcome,
|
|
567
|
+
json_remove(le.attrs, '$.__plurnk_curation') AS attrs
|
|
568
|
+
FROM log_entries le
|
|
569
|
+
JOIN workers w ON w.id = le.worker_id
|
|
570
|
+
JOIN loops l ON l.id = le.loop_id
|
|
571
|
+
JOIN turns t ON t.id = le.turn_id
|
|
572
|
+
WHERE le.ambient_event_id IS NULL
|
|
573
|
+
AND le.inherited_history = 0
|
|
574
|
+
AND le.op IS NOT NULL
|
|
575
|
+
AND le.state != 'proposed'
|
|
576
|
+
AND NOT (
|
|
577
|
+
le.op IN ('NEXT', 'WAIT', 'DONE', 'FAIL')
|
|
578
|
+
AND l.status IN (200, 413, 429, 499, 500, 504, 508)
|
|
579
|
+
)
|
|
580
|
+
) candidate
|
|
581
|
+
WHERE target_parent_worker_id IS NOT NULL OR workspace_broadcast = 1;
|