@plurnk/plurnk-service 1.16.4 → 1.17.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 +122 -246
- package/INSTALL.md +84 -138
- package/README.md +9 -5
- package/SPEC.md +1710 -1015
- 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 +3 -1
- package/dist/content/read-resolve.d.ts.map +1 -1
- package/dist/content/read-resolve.js +39 -7
- package/dist/content/read-resolve.js.map +1 -1
- package/dist/core/AdmittedTurnExecutor.d.ts +3 -5
- package/dist/core/AdmittedTurnExecutor.d.ts.map +1 -1
- package/dist/core/AdmittedTurnExecutor.js +91 -83
- 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 +87 -65
- package/dist/core/CapabilityResolver.js.map +1 -1
- package/dist/core/ChannelWrite.d.ts +14 -11
- package/dist/core/ChannelWrite.d.ts.map +1 -1
- package/dist/core/ChannelWrite.js +11 -12
- 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 +36 -39
- package/dist/core/DataStatementRunner.js.map +1 -1
- package/dist/core/Dispatcher.d.ts +19 -26
- package/dist/core/Dispatcher.d.ts.map +1 -1
- package/dist/core/Dispatcher.js +369 -219
- 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 +73 -163
- 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 +13 -0
- package/dist/core/ExecutorRegistry.d.ts +7 -5
- package/dist/core/ExecutorRegistry.d.ts.map +1 -1
- package/dist/core/ExecutorRegistry.js +36 -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 +42 -11
- 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 +18 -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 +25 -32
- 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 +163 -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.sql +70 -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 +20 -19
- 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 +10 -0
- package/dist/core/RuntimeWorker.js.map +1 -0
- package/dist/core/RuntimeWorker.sql +5 -0
- package/dist/core/SchemeRegistry.d.ts +12 -16
- package/dist/core/SchemeRegistry.d.ts.map +1 -1
- package/dist/core/SchemeRegistry.js +58 -84
- 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 +9 -6
- package/dist/core/StrikeRail.d.ts.map +1 -1
- package/dist/core/StrikeRail.js +60 -113
- 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 +76 -52
- 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} +25 -17
- package/dist/core/TurnDispositionHandler.d.ts.map +1 -0
- package/dist/core/TurnDispositionHandler.js +198 -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 +40 -15
- 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 +9 -12
- package/dist/core/TurnRunner.d.ts.map +1 -1
- package/dist/core/TurnRunner.js +232 -408
- 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 +41 -48
- package/dist/core/WorkerControlHandler.js.map +1 -1
- package/dist/core/WorkerName.d.ts +8 -6
- package/dist/core/WorkerName.d.ts.map +1 -1
- package/dist/core/WorkerName.js +33 -24
- 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 +29 -6
- 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-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 +14 -0
- 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 +25 -19
- 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/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 +131 -163
- 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 +27 -90
- package/dist/digest/Digest.js.map +1 -1
- package/dist/digest/DigestRender.d.ts.map +1 -1
- package/dist/digest/DigestRender.js +14 -54
- package/dist/digest/DigestRender.js.map +1 -1
- package/dist/digest/digest-rows.d.ts +10 -32
- package/dist/digest/digest-rows.d.ts.map +1 -1
- package/dist/digest/digest.sql +43 -18
- package/dist/schemes/Exec.d.ts +6 -12
- package/dist/schemes/Exec.d.ts.map +1 -1
- package/dist/schemes/Exec.js +256 -188
- 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/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 -92
- 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 +6 -14
- 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 +116 -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 +142 -46
- 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 +15 -12
- 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 +1 -3
- package/dist/schemes/_search-index.d.ts.map +1 -1
- package/dist/schemes/_search-index.js +79 -110
- package/dist/schemes/_search-index.js.map +1 -1
- package/dist/schemes/_search-index.sql +30 -0
- 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.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 +5 -8
- package/dist/server/ClientReads.js.map +1 -1
- package/dist/server/Daemon.d.ts +14 -21
- package/dist/server/Daemon.d.ts.map +1 -1
- package/dist/server/Daemon.js +135 -156
- package/dist/server/Daemon.js.map +1 -1
- package/dist/server/DaemonModule.d.ts +23 -21
- 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/Functionality.d.ts +11 -12
- package/dist/server/Functionality.d.ts.map +1 -1
- package/dist/server/Functionality.js +129 -101
- package/dist/server/Functionality.js.map +1 -1
- package/dist/server/FunctionalityManager.d.ts +3 -5
- package/dist/server/FunctionalityManager.d.ts.map +1 -1
- package/dist/server/FunctionalityManager.js +20 -58
- 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 -37
- 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 +22 -0
- package/dist/server/Retention.d.ts.map +1 -0
- package/dist/server/Retention.js +54 -0
- package/dist/server/Retention.js.map +1 -0
- package/dist/server/Retention.sql +36 -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 +97 -104
- 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 +36 -0
- package/dist/server/WorkspaceResidency.d.ts.map +1 -0
- package/dist/server/WorkspaceResidency.js +199 -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 +4 -45
- 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 +65 -42
- package/dist/server/envelope.d.ts +8 -0
- package/dist/server/envelope.d.ts.map +1 -1
- package/dist/server/envelope.js +9 -7
- package/dist/server/envelope.js.map +1 -1
- package/dist/server/envelope.sql +49 -13
- package/dist/server/lifecycle-recovery.sql +14 -17
- 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 +19 -0
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +5 -17
- package/dist/service.js.map +1 -1
- package/docs/members.md +83 -0
- package/docs/skills.md +50 -0
- package/migrations/001_workspaces.sql +53 -0
- package/migrations/002_workers.sql +183 -0
- package/migrations/003_loops.sql +326 -0
- package/migrations/004_inference.sql +360 -0
- package/migrations/005_entries.sql +207 -0
- package/migrations/006_log.sql +578 -0
- package/migrations/007_subscriptions.sql +175 -0
- package/migrations/008_interactions.sql +29 -0
- package/package.json +33 -40
- 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,53 @@
|
|
|
1
|
+
-- MIGRATE: 1 workspaces
|
|
2
|
+
-- Chapter 1 of the schema baseline ({§db-schema-baseline}): The workspace: identity, module state, membership constraints.
|
|
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
|
+
-- workspaces
|
|
7
|
+
-- project_root: workspace pointer. NULL = headless (no disk side-effects);
|
|
8
|
+
-- non-null = absolute path to the client's source tree, supplied at
|
|
9
|
+
-- workspace.create or workspace.set_root.
|
|
10
|
+
CREATE TABLE IF NOT EXISTS workspaces (
|
|
11
|
+
id INTEGER NOT NULL PRIMARY KEY,
|
|
12
|
+
version INTEGER NOT NULL DEFAULT 0 CHECK (version >= 0),
|
|
13
|
+
name TEXT NOT NULL UNIQUE CHECK (length(name) > 0),
|
|
14
|
+
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
15
|
+
project_root TEXT,
|
|
16
|
+
-- {§operator-config} validated client workspace settings; each field composes
|
|
17
|
+
-- with operator configuration at its owning use site.
|
|
18
|
+
settings TEXT NOT NULL DEFAULT '{}' CHECK (json_valid(settings))
|
|
19
|
+
) STRICT;
|
|
20
|
+
|
|
21
|
+
CREATE INDEX IF NOT EXISTS workspaces_created_at ON workspaces (created_at);
|
|
22
|
+
|
|
23
|
+
-- {§module-workspace-state}: one provider-validated snapshot per workspace.
|
|
24
|
+
CREATE TABLE IF NOT EXISTS workspace_module_state (
|
|
25
|
+
workspace_id INTEGER NOT NULL,
|
|
26
|
+
namespace_owner TEXT NOT NULL CHECK (length(namespace_owner) > 0),
|
|
27
|
+
state TEXT NOT NULL CHECK (json_valid(state)),
|
|
28
|
+
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
29
|
+
PRIMARY KEY (workspace_id, namespace_owner),
|
|
30
|
+
FOREIGN KEY (workspace_id) REFERENCES workspaces(id) ON DELETE CASCADE
|
|
31
|
+
) STRICT;
|
|
32
|
+
|
|
33
|
+
-- workspace_constraints
|
|
34
|
+
-- SPEC {§membership} constraint overlay — explicit policy and the inspectable
|
|
35
|
+
-- exact pick produced by accepted file creation share one representation.
|
|
36
|
+
-- Per (workspace, effect, glob/target): `pick` (members git misses, resolved by a
|
|
37
|
+
-- targeted client-dictated scan), `hide` (drop git-tracked matches), `view` (member
|
|
38
|
+
-- for read; File.edit rejects the write). git-absent, `pick` rows are the sole substrate
|
|
39
|
+
-- source. Composed at membership resolution; node:path.matchesGlob.
|
|
40
|
+
CREATE TABLE IF NOT EXISTS workspace_constraints (
|
|
41
|
+
workspace_id INTEGER NOT NULL,
|
|
42
|
+
-- include admits files git misses; exclude removes members — the members family's lexicon
|
|
43
|
+
-- ({§members-projection}). An inclusion is a pattern scan; a creation record is one exact path.
|
|
44
|
+
effect TEXT NOT NULL CHECK (effect IN ('include', 'exclude')),
|
|
45
|
+
glob TEXT NOT NULL,
|
|
46
|
+
-- create: the exact record of a file Plurnk wrote ({§fs-create-record}); members: a
|
|
47
|
+
-- human-authored definition projected by the members family; model: a definition the model
|
|
48
|
+
-- proposed under the members scope — never admitted past the repository's ignore rules.
|
|
49
|
+
source TEXT NOT NULL CHECK (source IN ('create', 'members', 'model')),
|
|
50
|
+
CHECK (source IN ('members', 'model') OR effect = 'include'),
|
|
51
|
+
PRIMARY KEY (workspace_id, effect, glob),
|
|
52
|
+
FOREIGN KEY (workspace_id) REFERENCES workspaces(id) ON DELETE CASCADE
|
|
53
|
+
) STRICT, WITHOUT ROWID;
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
-- MIGRATE: 2 workers
|
|
2
|
+
-- Chapter 2 of the schema baseline ({§db-schema-baseline}): Workers over a workspace, their model routes, and the ambient event feed their siblings observe.
|
|
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
|
+
-- model_routes — the immutable resolved model route ({§worker-model-selection}). One row per
|
|
7
|
+
-- complete resolved tuple; append-only. Alias is provenance plus a tuning scope,
|
|
8
|
+
-- not route identity, and is absent on a direct provider/model selection.
|
|
9
|
+
CREATE TABLE IF NOT EXISTS model_routes (
|
|
10
|
+
id INTEGER NOT NULL PRIMARY KEY,
|
|
11
|
+
alias TEXT CHECK (alias IS NULL OR length(alias) > 0),
|
|
12
|
+
provider TEXT NOT NULL CHECK (length(provider) > 0),
|
|
13
|
+
model TEXT NOT NULL CHECK (length(model) > 0),
|
|
14
|
+
base_url TEXT CHECK (base_url IS NULL OR length(base_url) > 0),
|
|
15
|
+
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
|
|
16
|
+
) STRICT;
|
|
17
|
+
|
|
18
|
+
CREATE UNIQUE INDEX IF NOT EXISTS model_routes_identity
|
|
19
|
+
ON model_routes (coalesce(alias, ''), provider, model, coalesce(base_url, ''));
|
|
20
|
+
|
|
21
|
+
-- workers
|
|
22
|
+
CREATE TABLE IF NOT EXISTS workers (
|
|
23
|
+
id INTEGER NOT NULL PRIMARY KEY,
|
|
24
|
+
version INTEGER NOT NULL DEFAULT 0 CHECK (version >= 0),
|
|
25
|
+
workspace_id INTEGER NOT NULL,
|
|
26
|
+
-- {§loop-wake-identity}: completion events, not packet/log curation state.
|
|
27
|
+
wake_revision INTEGER NOT NULL DEFAULT 0 CHECK (wake_revision >= 0),
|
|
28
|
+
name TEXT NOT NULL CHECK (length(name) > 0),
|
|
29
|
+
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
30
|
+
-- {§worker-provider-identity}: provider affinity must not collide when
|
|
31
|
+
-- independent databases reuse local integer ids.
|
|
32
|
+
provider_identity TEXT NOT NULL DEFAULT (lower(hex(randomblob(16))))
|
|
33
|
+
CHECK (length(provider_identity) = 32 AND provider_identity NOT GLOB '*[^0-9a-f]*'),
|
|
34
|
+
-- {§worker-model-selection}: the worker's durable resolved model, NULL for non-model
|
|
35
|
+
-- workers or a deliberately modelless unresolved worker. spawn_model_route_id is the
|
|
36
|
+
-- persistent spawn override; NULL means "use my model."
|
|
37
|
+
model_route_id INTEGER REFERENCES model_routes(id),
|
|
38
|
+
spawn_model_route_id INTEGER REFERENCES model_routes(id),
|
|
39
|
+
-- {§worker-reasoning-policy}: nullable only while the worker has no model;
|
|
40
|
+
-- once selected, model and reasoning policy form one durable generation policy.
|
|
41
|
+
reasoning_policy TEXT CHECK (reasoning_policy IS NULL OR length(reasoning_policy) > 0),
|
|
42
|
+
-- {§worker-reasoning-source}: whether reasoning_policy was chosen (worker.reasoning.set)
|
|
43
|
+
-- or seeded from the alias configuration; a default never masquerades as a choice.
|
|
44
|
+
reasoning_source TEXT NOT NULL DEFAULT 'default' CHECK (reasoning_source IN ('default', 'explicit')),
|
|
45
|
+
-- workers fork via parent_worker_id; workspaces carry no parent — {§machine-processes-no-fork-workspace}
|
|
46
|
+
parent_worker_id INTEGER CHECK (parent_worker_id IS NULL OR parent_worker_id != id),
|
|
47
|
+
origin TEXT NOT NULL DEFAULT 'client' CHECK (origin IN ('model', 'client', '_plurnk')),
|
|
48
|
+
-- {§methods-model-worker}: durable identity for the workspace's stable
|
|
49
|
+
-- default conversation; separate from its literal name.
|
|
50
|
+
default_conversation INTEGER NOT NULL DEFAULT 0 CHECK (default_conversation IN (0, 1)),
|
|
51
|
+
-- {§worker-causal-admission}: cancellation retires unread arrivals without rewriting history.
|
|
52
|
+
cancelled_through_sequence INTEGER NOT NULL DEFAULT 0 CHECK (cancelled_through_sequence >= 0),
|
|
53
|
+
-- The Problem the latest cancellation delivered to this worker's live loops; writing it is
|
|
54
|
+
-- the cancellation ({§worker-cancel-trigger}). NULL until the worker's scope is first cancelled.
|
|
55
|
+
cancellation TEXT CHECK (cancellation IS NULL OR (json_valid(cancellation) AND json_extract(cancellation, '$.status') = 499)),
|
|
56
|
+
-- {§env-delta-log-pull}: monotonic observation progress, not a private world snapshot.
|
|
57
|
+
-- Creation captures the workspace high-water; a fork instead copies its
|
|
58
|
+
-- parent's cursor and records the closed event boundary of its snapshot.
|
|
59
|
+
ambient_event_cursor INTEGER CHECK (ambient_event_cursor IS NULL OR ambient_event_cursor >= 0),
|
|
60
|
+
fork_event_boundary INTEGER CHECK (fork_event_boundary IS NULL OR fork_event_boundary >= 0),
|
|
61
|
+
CHECK (fork_event_boundary IS NULL OR parent_worker_id IS NOT NULL),
|
|
62
|
+
CHECK (default_conversation = 0 OR (origin = 'model' AND parent_worker_id IS NULL)),
|
|
63
|
+
CHECK ((model_route_id IS NULL) = (reasoning_policy IS NULL)),
|
|
64
|
+
FOREIGN KEY (workspace_id) REFERENCES workspaces(id) ON DELETE CASCADE,
|
|
65
|
+
FOREIGN KEY (parent_worker_id) REFERENCES workers(id) ON DELETE CASCADE
|
|
66
|
+
) STRICT;
|
|
67
|
+
|
|
68
|
+
CREATE INDEX IF NOT EXISTS workers_workspace_id_created_at ON workers (workspace_id, created_at);
|
|
69
|
+
|
|
70
|
+
CREATE INDEX IF NOT EXISTS workers_parent_worker_id ON workers (parent_worker_id);
|
|
71
|
+
|
|
72
|
+
CREATE UNIQUE INDEX IF NOT EXISTS workers_provider_identity ON workers (provider_identity);
|
|
73
|
+
|
|
74
|
+
CREATE UNIQUE INDEX IF NOT EXISTS workers_workspace_default_conversation
|
|
75
|
+
ON workers (workspace_id) WHERE default_conversation = 1;
|
|
76
|
+
|
|
77
|
+
-- {§worker-scheme-spawn}: a retained name cannot be rebound to another actor.
|
|
78
|
+
CREATE UNIQUE INDEX IF NOT EXISTS workers_workspace_name ON workers (workspace_id, name);
|
|
79
|
+
|
|
80
|
+
-- {§db-fk-indexes} Foreign-key check paths: without these, updating or replacing a route scans every worker.
|
|
81
|
+
CREATE INDEX IF NOT EXISTS workers_model_route_id ON workers (model_route_id) WHERE model_route_id IS NOT NULL;
|
|
82
|
+
|
|
83
|
+
CREATE INDEX IF NOT EXISTS workers_spawn_model_route_id ON workers (spawn_model_route_id) WHERE spawn_model_route_id IS NOT NULL;
|
|
84
|
+
|
|
85
|
+
CREATE TRIGGER IF NOT EXISTS workers_provider_identity_immutable
|
|
86
|
+
BEFORE UPDATE OF provider_identity ON workers
|
|
87
|
+
WHEN NEW.provider_identity != OLD.provider_identity
|
|
88
|
+
BEGIN
|
|
89
|
+
SELECT RAISE(ABORT, 'workers.provider_identity is immutable');
|
|
90
|
+
END;
|
|
91
|
+
|
|
92
|
+
CREATE TRIGGER IF NOT EXISTS workers_fork_event_boundary_immutable
|
|
93
|
+
BEFORE UPDATE OF fork_event_boundary ON workers
|
|
94
|
+
WHEN NEW.fork_event_boundary IS NOT OLD.fork_event_boundary
|
|
95
|
+
BEGIN
|
|
96
|
+
SELECT RAISE(ABORT, 'workers.fork_event_boundary is immutable');
|
|
97
|
+
END;
|
|
98
|
+
|
|
99
|
+
-- {§env-delta-log-pull}: one append-only occurrence journal gives every
|
|
100
|
+
-- producer a shared monotonic order. Audience is structural: direct parent,
|
|
101
|
+
-- explicit workspace broadcast, or their union. The event snapshots exactly
|
|
102
|
+
-- what an observer row needs because source-log curation cannot erase history.
|
|
103
|
+
-- source_record_id is forensic identity for the originating log/loop row, not a
|
|
104
|
+
-- foreign key: model log curation must not erase an already-recorded occurrence.
|
|
105
|
+
CREATE TABLE IF NOT EXISTS ambient_events (
|
|
106
|
+
id INTEGER NOT NULL PRIMARY KEY,
|
|
107
|
+
workspace_id INTEGER NOT NULL,
|
|
108
|
+
producer_worker_id INTEGER NOT NULL,
|
|
109
|
+
target_parent_worker_id INTEGER,
|
|
110
|
+
workspace_broadcast INTEGER NOT NULL DEFAULT 0 CHECK (workspace_broadcast IN (0, 1)),
|
|
111
|
+
kind TEXT NOT NULL CHECK (kind IN ('activity', 'loop_termination')),
|
|
112
|
+
source_record_id INTEGER NOT NULL CHECK (source_record_id >= 1),
|
|
113
|
+
at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
114
|
+
source TEXT,
|
|
115
|
+
op TEXT NOT NULL,
|
|
116
|
+
signal TEXT CHECK (signal IS NULL OR json_valid(signal)),
|
|
117
|
+
scheme TEXT,
|
|
118
|
+
username TEXT,
|
|
119
|
+
password TEXT,
|
|
120
|
+
hostname TEXT,
|
|
121
|
+
port INTEGER CHECK (port IS NULL OR (port BETWEEN 0 AND 65535)),
|
|
122
|
+
pathname TEXT,
|
|
123
|
+
query TEXT,
|
|
124
|
+
fragment TEXT,
|
|
125
|
+
line_marker TEXT CHECK (line_marker IS NULL OR json_valid(line_marker)),
|
|
126
|
+
tx TEXT NOT NULL,
|
|
127
|
+
mimetype_tx TEXT NOT NULL CHECK (length(mimetype_tx) > 0),
|
|
128
|
+
rx TEXT NOT NULL,
|
|
129
|
+
mimetype_rx TEXT NOT NULL CHECK (length(mimetype_rx) > 0),
|
|
130
|
+
status_rx INTEGER NOT NULL CHECK (status_rx BETWEEN 100 AND 599),
|
|
131
|
+
state TEXT NOT NULL CHECK (state IN ('resolved', 'failed', 'cancelled')),
|
|
132
|
+
outcome TEXT,
|
|
133
|
+
attrs TEXT NOT NULL DEFAULT '{}' CHECK (json_valid(attrs)),
|
|
134
|
+
terminated_by TEXT CHECK (terminated_by IS NULL OR terminated_by = 'cancel'),
|
|
135
|
+
CHECK (target_parent_worker_id IS NOT NULL OR workspace_broadcast = 1),
|
|
136
|
+
CHECK (
|
|
137
|
+
(kind = 'activity' AND terminated_by IS NULL)
|
|
138
|
+
OR
|
|
139
|
+
(kind = 'loop_termination'
|
|
140
|
+
AND op = 'SEND'
|
|
141
|
+
-- {§env-delta-child-termination}: a message from the concluded child;
|
|
142
|
+
-- `source` names the actor and its READ address (#567, operator 2026-09-07).
|
|
143
|
+
AND scheme IS NULL
|
|
144
|
+
AND pathname IS NULL
|
|
145
|
+
AND json_valid(rx)
|
|
146
|
+
AND json_type(rx) = 'object'
|
|
147
|
+
AND json_type(rx, '$.status') = 'integer'
|
|
148
|
+
AND json_extract(rx, '$.status') = status_rx)
|
|
149
|
+
),
|
|
150
|
+
FOREIGN KEY (workspace_id) REFERENCES workspaces(id) ON DELETE CASCADE,
|
|
151
|
+
FOREIGN KEY (producer_worker_id) REFERENCES workers(id) ON DELETE CASCADE,
|
|
152
|
+
FOREIGN KEY (target_parent_worker_id) REFERENCES workers(id) ON DELETE CASCADE
|
|
153
|
+
) STRICT;
|
|
154
|
+
|
|
155
|
+
CREATE INDEX IF NOT EXISTS ambient_events_workspace_id_id
|
|
156
|
+
ON ambient_events (workspace_id, id);
|
|
157
|
+
|
|
158
|
+
-- {§db-index-owners} Producer deletion's foreign-key check walks its events by producer; no registry statement selects by it.
|
|
159
|
+
CREATE INDEX IF NOT EXISTS ambient_events_producer_kind_id
|
|
160
|
+
ON ambient_events (producer_worker_id, kind, id);
|
|
161
|
+
|
|
162
|
+
CREATE INDEX IF NOT EXISTS ambient_events_parent_id
|
|
163
|
+
ON ambient_events (target_parent_worker_id, id)
|
|
164
|
+
WHERE target_parent_worker_id IS NOT NULL;
|
|
165
|
+
|
|
166
|
+
CREATE UNIQUE INDEX IF NOT EXISTS ambient_events_source_identity
|
|
167
|
+
ON ambient_events (producer_worker_id, kind, source_record_id);
|
|
168
|
+
|
|
169
|
+
CREATE TRIGGER IF NOT EXISTS ambient_events_structural_audience
|
|
170
|
+
BEFORE INSERT ON ambient_events
|
|
171
|
+
WHEN NOT EXISTS (
|
|
172
|
+
SELECT 1
|
|
173
|
+
FROM workers producer
|
|
174
|
+
WHERE producer.id = NEW.producer_worker_id
|
|
175
|
+
AND producer.workspace_id = NEW.workspace_id
|
|
176
|
+
AND (
|
|
177
|
+
NEW.target_parent_worker_id IS NULL
|
|
178
|
+
OR NEW.target_parent_worker_id = producer.parent_worker_id
|
|
179
|
+
)
|
|
180
|
+
)
|
|
181
|
+
BEGIN
|
|
182
|
+
SELECT RAISE(ABORT, 'ambient event audience must be the producer direct parent in the same workspace');
|
|
183
|
+
END;
|
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
-- MIGRATE: 3 loops
|
|
2
|
+
-- Chapter 3 of the schema baseline ({§db-schema-baseline}): Loops, their turns, and the immutable sources a turn was built from.
|
|
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
|
+
-- loops
|
|
7
|
+
-- policy: immutable per-loop proposal disposition ({§loop-policy-effective-read}).
|
|
8
|
+
CREATE TABLE IF NOT EXISTS loops (
|
|
9
|
+
id INTEGER NOT NULL PRIMARY KEY,
|
|
10
|
+
version INTEGER NOT NULL DEFAULT 0 CHECK (version >= 0),
|
|
11
|
+
worker_id INTEGER NOT NULL,
|
|
12
|
+
sequence INTEGER NOT NULL CHECK (sequence >= 1),
|
|
13
|
+
status INTEGER NOT NULL DEFAULT 102 CHECK (status IN (100, 102, 200, 202, 413, 429, 499, 500, 504, 508)),
|
|
14
|
+
prompt TEXT NOT NULL,
|
|
15
|
+
-- {§prompt-causal-source}: canonical actor address for the initial prompt;
|
|
16
|
+
-- NULL means the owning worker itself.
|
|
17
|
+
prompt_source TEXT CHECK (prompt_source IS NULL OR length(prompt_source) > 0),
|
|
18
|
+
policy TEXT NOT NULL DEFAULT '{"proposals":"review"}' CHECK (json_valid(policy)),
|
|
19
|
+
-- {§worker-model-selection}: immutable loop snapshots of the resolved model route and the
|
|
20
|
+
-- effective spawn route (was provider_spec/child_provider_spec JSON).
|
|
21
|
+
model_route_id INTEGER REFERENCES model_routes(id),
|
|
22
|
+
spawn_model_route_id INTEGER REFERENCES model_routes(id),
|
|
23
|
+
reasoning_policy TEXT CHECK (reasoning_policy IS NULL OR length(reasoning_policy) > 0),
|
|
24
|
+
max_turns INTEGER NOT NULL DEFAULT 50 CHECK (max_turns >= -1),
|
|
25
|
+
-- {§worker-scheduled-send}: the selected cadence slot, coalesced at claim.
|
|
26
|
+
scheduled_at INTEGER CHECK (scheduled_at IS NULL OR scheduled_at BETWEEN 0 AND 8640000000000000),
|
|
27
|
+
repeat_interval_ms INTEGER CHECK (repeat_interval_ms IS NULL OR repeat_interval_ms > 0),
|
|
28
|
+
recurrence_root_loop_id INTEGER REFERENCES loops(id),
|
|
29
|
+
-- {§loop-execution-allowance}: initialized on first execution, charged with disposition.
|
|
30
|
+
execution_budget_ms INTEGER CHECK (execution_budget_ms IS NULL OR execution_budget_ms > 0),
|
|
31
|
+
execution_elapsed_ms REAL NOT NULL DEFAULT 0 CHECK (execution_elapsed_ms >= 0),
|
|
32
|
+
-- {§worker-wait-timing}: epoch milliseconds; NULL polling inherits streams.
|
|
33
|
+
wait_revision INTEGER NOT NULL DEFAULT 0 CHECK (wait_revision >= 0),
|
|
34
|
+
-- {§loop-rail-continuity}: one loop-owned streak and bounded repetition window.
|
|
35
|
+
strike_streak INTEGER NOT NULL DEFAULT 0 CHECK (strike_streak >= 0),
|
|
36
|
+
cycle_history TEXT NOT NULL DEFAULT '[]' CHECK (json_valid(cycle_history) AND json_type(cycle_history) = 'array'),
|
|
37
|
+
cycle_wait_revision INTEGER NOT NULL DEFAULT 0 CHECK (cycle_wait_revision >= 0 AND cycle_wait_revision <= wait_revision),
|
|
38
|
+
observed_wake_revision INTEGER NOT NULL DEFAULT 0 CHECK (observed_wake_revision >= 0),
|
|
39
|
+
wait_deadline_at INTEGER,
|
|
40
|
+
wait_poll_interval INTEGER CHECK (wait_poll_interval IS NULL OR wait_poll_interval >= 0),
|
|
41
|
+
wait_poll_at INTEGER,
|
|
42
|
+
-- {§methods-loop-run-open-paths}: the initial prompt frame's selected paths,
|
|
43
|
+
-- held here until turn 1 materializes that frame (string[] JSON).
|
|
44
|
+
open_paths TEXT NOT NULL DEFAULT '[]' CHECK (json_valid(open_paths)),
|
|
45
|
+
-- {§prompt-loop-containment}: one queued recovery loop may carry the
|
|
46
|
+
-- complete orphan frame set of one concluded source loop.
|
|
47
|
+
orphan_source_loop_id INTEGER,
|
|
48
|
+
-- {§worker-scheme} loop-termination delta: terminated_at is stamped by the trigger
|
|
49
|
+
-- below when status crosses into terminal (every death-path, uniformly).
|
|
50
|
+
terminated_at TEXT,
|
|
51
|
+
terminal_result TEXT,
|
|
52
|
+
-- {§loop-terminal-authorship}: 'cancel' names an external loop.cancel;
|
|
53
|
+
-- NULL covers model terminals and engine verdicts whose result carries the story.
|
|
54
|
+
terminated_by TEXT CHECK (terminated_by IS NULL OR terminated_by = 'cancel'),
|
|
55
|
+
CONSTRAINT loops_generation_policy_contract CHECK (
|
|
56
|
+
(model_route_id IS NULL) = (reasoning_policy IS NULL)
|
|
57
|
+
),
|
|
58
|
+
CONSTRAINT loops_schedule_contract CHECK (
|
|
59
|
+
(repeat_interval_ms IS NULL OR scheduled_at IS NOT NULL)
|
|
60
|
+
AND (recurrence_root_loop_id IS NULL OR repeat_interval_ms IS NOT NULL)
|
|
61
|
+
),
|
|
62
|
+
CONSTRAINT loops_terminal_result_contract CHECK (
|
|
63
|
+
CASE
|
|
64
|
+
WHEN status IN (100, 102, 202) THEN terminal_result IS NULL
|
|
65
|
+
WHEN terminal_result IS NULL OR NOT json_valid(terminal_result) THEN 0
|
|
66
|
+
ELSE
|
|
67
|
+
json_type(terminal_result) IS 'object'
|
|
68
|
+
AND json_type(terminal_result, '$.status') IS 'integer'
|
|
69
|
+
AND (
|
|
70
|
+
json_extract(terminal_result, '$.status') = status
|
|
71
|
+
OR (
|
|
72
|
+
status = 200
|
|
73
|
+
AND json_extract(terminal_result, '$.status') BETWEEN 200 AND 399
|
|
74
|
+
AND json_extract(terminal_result, '$.status') != 202
|
|
75
|
+
)
|
|
76
|
+
OR (
|
|
77
|
+
status = 500
|
|
78
|
+
AND json_extract(terminal_result, '$.status') BETWEEN 400 AND 599
|
|
79
|
+
)
|
|
80
|
+
)
|
|
81
|
+
AND CASE
|
|
82
|
+
WHEN json_extract(terminal_result, '$.status') < 400 THEN
|
|
83
|
+
json_type(terminal_result, '$.problem') IS NULL
|
|
84
|
+
ELSE
|
|
85
|
+
json_type(terminal_result, '$.problem') IS 'object'
|
|
86
|
+
AND json_type(terminal_result, '$.problem.status') IS 'integer'
|
|
87
|
+
AND json_extract(terminal_result, '$.problem.status')
|
|
88
|
+
= json_extract(terminal_result, '$.status')
|
|
89
|
+
AND json_type(terminal_result, '$.problem.type') IS 'text'
|
|
90
|
+
AND length(json_extract(terminal_result, '$.problem.type')) > 0
|
|
91
|
+
AND json_type(terminal_result, '$.problem.title') IS 'text'
|
|
92
|
+
AND length(json_extract(terminal_result, '$.problem.title')) > 0
|
|
93
|
+
AND json_type(terminal_result, '$.problem.detail') IS 'text'
|
|
94
|
+
AND length(json_extract(terminal_result, '$.problem.detail')) > 0
|
|
95
|
+
AND json_type(terminal_result, '$.problem.instance') IS 'text'
|
|
96
|
+
AND length(json_extract(terminal_result, '$.problem.instance')) > 0
|
|
97
|
+
END
|
|
98
|
+
END
|
|
99
|
+
),
|
|
100
|
+
FOREIGN KEY (worker_id) REFERENCES workers(id) ON DELETE CASCADE,
|
|
101
|
+
FOREIGN KEY (orphan_source_loop_id) REFERENCES loops(id)
|
|
102
|
+
) STRICT;
|
|
103
|
+
|
|
104
|
+
CREATE UNIQUE INDEX IF NOT EXISTS loops_worker_id_sequence ON loops (worker_id, sequence);
|
|
105
|
+
|
|
106
|
+
CREATE UNIQUE INDEX IF NOT EXISTS loops_orphan_source_loop_id ON loops (orphan_source_loop_id);
|
|
107
|
+
|
|
108
|
+
-- {§db-fk-indexes} Foreign-key check paths (route replacement, recurrence-root cascade) stop scanning loops.
|
|
109
|
+
CREATE INDEX IF NOT EXISTS loops_model_route_id ON loops (model_route_id) WHERE model_route_id IS NOT NULL;
|
|
110
|
+
|
|
111
|
+
CREATE INDEX IF NOT EXISTS loops_spawn_model_route_id ON loops (spawn_model_route_id) WHERE spawn_model_route_id IS NOT NULL;
|
|
112
|
+
|
|
113
|
+
CREATE INDEX IF NOT EXISTS loops_recurrence_root_loop_id ON loops (recurrence_root_loop_id) WHERE recurrence_root_loop_id IS NOT NULL;
|
|
114
|
+
|
|
115
|
+
CREATE UNIQUE INDEX IF NOT EXISTS loops_live_recurrence
|
|
116
|
+
ON loops (COALESCE(recurrence_root_loop_id, id))
|
|
117
|
+
WHERE repeat_interval_ms IS NOT NULL AND status IN (100, 102, 202);
|
|
118
|
+
|
|
119
|
+
-- turns
|
|
120
|
+
-- finish_reason / model: accepted provider-call metadata from the provider
|
|
121
|
+
-- response contract. Physical request accounting is normalized beneath the
|
|
122
|
+
-- logical emission attempt that caused it.
|
|
123
|
+
CREATE TABLE IF NOT EXISTS turns (
|
|
124
|
+
id INTEGER NOT NULL PRIMARY KEY,
|
|
125
|
+
version INTEGER NOT NULL DEFAULT 0 CHECK (version >= 0),
|
|
126
|
+
loop_id INTEGER NOT NULL,
|
|
127
|
+
sequence INTEGER NOT NULL CHECK (sequence >= 1),
|
|
128
|
+
timestamp TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
129
|
+
-- {§turn-record}: producer and purpose define the turn. Packet/provider
|
|
130
|
+
-- evidence below is an optional inference specialization.
|
|
131
|
+
producer TEXT NOT NULL CHECK (producer IN ('model', 'client', '_plurnk', 'plugin')),
|
|
132
|
+
kind TEXT NOT NULL CHECK (kind IN ('inference', 'initialization', 'operation', 'maintenance')),
|
|
133
|
+
status INTEGER NOT NULL CHECK (status BETWEEN 100 AND 599),
|
|
134
|
+
-- NULL while the producer still owns this turn. Status 102 is both the
|
|
135
|
+
-- provisional running value and the exact completed continue disposition;
|
|
136
|
+
-- completed_at distinguishes those states without inventing another status.
|
|
137
|
+
completed_at TEXT DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
138
|
+
-- Provider-derived curation calibration for this turn; NULL when input
|
|
139
|
+
-- capacity is unknown. {§tokenomics-client-gauge}
|
|
140
|
+
usage_curation_budget INTEGER CHECK (usage_curation_budget IS NULL OR usage_curation_budget >= 1),
|
|
141
|
+
-- {§packet-stored-shape}: NULL means no model request was assembled. A
|
|
142
|
+
-- present packet is either the measured request or that request extended
|
|
143
|
+
-- by the paired admitted-response fields. Its sections are rows
|
|
144
|
+
-- ({§packet-items}), never in this bag: the bag holds weight, attributions,
|
|
145
|
+
-- attachments, and the admitted response.
|
|
146
|
+
packet TEXT CHECK (
|
|
147
|
+
CASE
|
|
148
|
+
WHEN packet IS NULL THEN 1
|
|
149
|
+
WHEN json_valid(packet) = 0 THEN 0
|
|
150
|
+
ELSE COALESCE(
|
|
151
|
+
json_type(packet) = 'object'
|
|
152
|
+
AND json_type(packet, '$.weight') = 'integer'
|
|
153
|
+
AND json_extract(packet, '$.weight') >= 0
|
|
154
|
+
AND json_type(packet, '$.sections') IS NULL
|
|
155
|
+
AND json_type(packet, '$.attributions') = 'array'
|
|
156
|
+
AND (
|
|
157
|
+
(
|
|
158
|
+
json_type(packet, '$.assistant') IS NULL
|
|
159
|
+
AND json_type(packet, '$.assistantRaw') IS NULL
|
|
160
|
+
)
|
|
161
|
+
OR (
|
|
162
|
+
json_type(packet, '$.assistant') = 'object'
|
|
163
|
+
AND json_type(packet, '$.assistant.content') = 'text'
|
|
164
|
+
AND json_type(packet, '$.assistant.ops') = 'array'
|
|
165
|
+
AND json_type(packet, '$.assistant.reasoning') IN ('text', 'null')
|
|
166
|
+
AND json_type(packet, '$.assistantRaw') IS NOT NULL
|
|
167
|
+
)
|
|
168
|
+
),
|
|
169
|
+
0
|
|
170
|
+
)
|
|
171
|
+
END
|
|
172
|
+
),
|
|
173
|
+
finish_reason TEXT,
|
|
174
|
+
model TEXT CHECK (model IS NULL OR length(model) >= 1),
|
|
175
|
+
-- Opaque provider→client metadata plus the grammar transport key; absent outside
|
|
176
|
+
-- recorded inference evidence. {§meta-passthrough}, {§operator-grammar}
|
|
177
|
+
meta TEXT CHECK (meta IS NULL OR json_valid(meta)),
|
|
178
|
+
CHECK (completed_at IS NOT NULL OR status = 102),
|
|
179
|
+
CHECK ((producer = 'model') = (kind = 'inference')),
|
|
180
|
+
CHECK (kind NOT IN ('initialization', 'maintenance') OR producer = '_plurnk'),
|
|
181
|
+
CHECK (
|
|
182
|
+
kind = 'inference'
|
|
183
|
+
OR (
|
|
184
|
+
usage_curation_budget IS NULL
|
|
185
|
+
AND packet IS NULL
|
|
186
|
+
AND finish_reason IS NULL
|
|
187
|
+
AND model IS NULL
|
|
188
|
+
AND meta IS NULL
|
|
189
|
+
)
|
|
190
|
+
),
|
|
191
|
+
FOREIGN KEY (loop_id) REFERENCES loops(id) ON DELETE CASCADE
|
|
192
|
+
) STRICT;
|
|
193
|
+
|
|
194
|
+
CREATE UNIQUE INDEX IF NOT EXISTS turns_loop_id_sequence ON turns (loop_id, sequence);
|
|
195
|
+
|
|
196
|
+
-- {§actor-boundary-doc-injection}: derived observation only; no durable row is rewritten.
|
|
197
|
+
CREATE VIEW IF NOT EXISTS work_loops AS
|
|
198
|
+
SELECT l.* FROM loops l
|
|
199
|
+
WHERE NOT EXISTS (SELECT 1 FROM turns t WHERE t.loop_id = l.id AND t.kind = 'maintenance')
|
|
200
|
+
OR EXISTS (SELECT 1 FROM turns t WHERE t.loop_id = l.id AND t.kind <> 'maintenance');
|
|
201
|
+
|
|
202
|
+
-- {§packet-items}: a packet's sections are rows over content-addressed items. Every rendered
|
|
203
|
+
-- block — one log row's record, one non-log section's content — is stored once by its hash;
|
|
204
|
+
-- a turn stores the ordered composition. A row whose rendering did not change between turns
|
|
205
|
+
-- hashes to the same item, so a turn's durable cost is its new and changed items.
|
|
206
|
+
CREATE TABLE IF NOT EXISTS packet_items (
|
|
207
|
+
hash TEXT NOT NULL PRIMARY KEY CHECK (length(hash) = 64),
|
|
208
|
+
text TEXT NOT NULL
|
|
209
|
+
) STRICT, WITHOUT ROWID;
|
|
210
|
+
|
|
211
|
+
CREATE TABLE IF NOT EXISTS turn_sections (
|
|
212
|
+
turn_id INTEGER NOT NULL REFERENCES turns(id) ON DELETE CASCADE,
|
|
213
|
+
position INTEGER NOT NULL CHECK (position >= 0),
|
|
214
|
+
name TEXT NOT NULL CHECK (length(name) > 0),
|
|
215
|
+
slot TEXT NOT NULL CHECK (slot IN ('system', 'user')),
|
|
216
|
+
header TEXT,
|
|
217
|
+
weight INTEGER NOT NULL CHECK (weight >= 0),
|
|
218
|
+
PRIMARY KEY (turn_id, position),
|
|
219
|
+
UNIQUE (turn_id, name)
|
|
220
|
+
) STRICT, WITHOUT ROWID;
|
|
221
|
+
|
|
222
|
+
CREATE TABLE IF NOT EXISTS turn_section_items (
|
|
223
|
+
turn_id INTEGER NOT NULL,
|
|
224
|
+
section INTEGER NOT NULL,
|
|
225
|
+
position INTEGER NOT NULL CHECK (position >= 0),
|
|
226
|
+
item_hash TEXT NOT NULL REFERENCES packet_items(hash),
|
|
227
|
+
PRIMARY KEY (turn_id, section, position),
|
|
228
|
+
FOREIGN KEY (turn_id, section) REFERENCES turn_sections(turn_id, position) ON DELETE CASCADE
|
|
229
|
+
) STRICT, WITHOUT ROWID;
|
|
230
|
+
|
|
231
|
+
-- {§db-fk-indexes}: item collection and the packet_items foreign-key check path.
|
|
232
|
+
CREATE INDEX IF NOT EXISTS turn_section_items_item_hash ON turn_section_items (item_hash);
|
|
233
|
+
|
|
234
|
+
-- {§packet-items}: the one write of inference evidence — the packet bag, its sections as items,
|
|
235
|
+
-- and the provider metadata land in one statement through this view.
|
|
236
|
+
CREATE VIEW IF NOT EXISTS turn_inference_evidence AS
|
|
237
|
+
SELECT NULL AS turn_id, NULL AS packet, NULL AS sections,
|
|
238
|
+
NULL AS usage_curation_budget, NULL AS finish_reason, NULL AS model, NULL AS meta
|
|
239
|
+
WHERE 0;
|
|
240
|
+
|
|
241
|
+
CREATE TRIGGER IF NOT EXISTS turn_inference_evidence_insert
|
|
242
|
+
INSTEAD OF INSERT ON turn_inference_evidence
|
|
243
|
+
BEGIN
|
|
244
|
+
SELECT RAISE(ABORT, 'turn is not an open model inference turn')
|
|
245
|
+
WHERE NOT EXISTS (
|
|
246
|
+
SELECT 1 FROM turns
|
|
247
|
+
WHERE id = NEW.turn_id AND producer = 'model' AND kind = 'inference'
|
|
248
|
+
AND completed_at IS NULL AND packet IS NULL
|
|
249
|
+
);
|
|
250
|
+
SELECT RAISE(ABORT, 'packet sections must be a JSON array of {name, slot, header, weight, items}')
|
|
251
|
+
WHERE json_type(NEW.sections) IS NOT 'array';
|
|
252
|
+
INSERT OR IGNORE INTO packet_items (hash, text)
|
|
253
|
+
SELECT sha256(item.value), item.value
|
|
254
|
+
FROM json_each(NEW.sections) AS section, json_each(section.value, '$.items') AS item;
|
|
255
|
+
INSERT INTO turn_sections (turn_id, position, name, slot, header, weight)
|
|
256
|
+
SELECT NEW.turn_id, section.key,
|
|
257
|
+
json_extract(section.value, '$.name'), json_extract(section.value, '$.slot'),
|
|
258
|
+
json_extract(section.value, '$.header'), json_extract(section.value, '$.weight')
|
|
259
|
+
FROM json_each(NEW.sections) AS section;
|
|
260
|
+
INSERT INTO turn_section_items (turn_id, section, position, item_hash)
|
|
261
|
+
SELECT NEW.turn_id, section.key, item.key, sha256(item.value)
|
|
262
|
+
FROM json_each(NEW.sections) AS section, json_each(section.value, '$.items') AS item;
|
|
263
|
+
UPDATE turns
|
|
264
|
+
SET packet = NEW.packet,
|
|
265
|
+
usage_curation_budget = NEW.usage_curation_budget,
|
|
266
|
+
finish_reason = NEW.finish_reason,
|
|
267
|
+
model = NEW.model,
|
|
268
|
+
meta = NEW.meta
|
|
269
|
+
WHERE id = NEW.turn_id;
|
|
270
|
+
END;
|
|
271
|
+
|
|
272
|
+
-- {§packet-items}: a turn as its readers know it — the packet bag with its sections assembled
|
|
273
|
+
-- back into it, byte for byte: a section's content is its items joined by one blank line.
|
|
274
|
+
CREATE VIEW IF NOT EXISTS turn_packets AS
|
|
275
|
+
SELECT t.id, t.loop_id, t.sequence, t.timestamp, t.producer, t.kind, t.status, t.completed_at,
|
|
276
|
+
t.usage_curation_budget, t.finish_reason, t.model, t.meta, t.version,
|
|
277
|
+
CASE WHEN t.packet IS NULL THEN NULL ELSE json_set(t.packet, '$.sections', json((
|
|
278
|
+
SELECT COALESCE(json_group_array(json_object(
|
|
279
|
+
'name', ts.name, 'slot', ts.slot, 'header', ts.header, 'weight', ts.weight,
|
|
280
|
+
'content', COALESCE((
|
|
281
|
+
SELECT group_concat(pi.text, char(10) || char(10) ORDER BY tsi.position)
|
|
282
|
+
FROM turn_section_items tsi JOIN packet_items pi ON pi.hash = tsi.item_hash
|
|
283
|
+
WHERE tsi.turn_id = ts.turn_id AND tsi.section = ts.position
|
|
284
|
+
), '')
|
|
285
|
+
) ORDER BY ts.position), '[]')
|
|
286
|
+
FROM turn_sections ts WHERE ts.turn_id = t.id
|
|
287
|
+
))) END AS packet
|
|
288
|
+
FROM turns t;
|
|
289
|
+
|
|
290
|
+
-- {§turn-source-resources}: immutable source facts belong to their turn, not
|
|
291
|
+
-- its curatable log. Derivation attachments are replaceable, source bytes are not.
|
|
292
|
+
CREATE TABLE IF NOT EXISTS turn_sources (
|
|
293
|
+
turn_id INTEGER NOT NULL REFERENCES turns(id) ON DELETE CASCADE,
|
|
294
|
+
kind TEXT NOT NULL CHECK (kind IN ('ops', 'reasoning')),
|
|
295
|
+
content TEXT NOT NULL,
|
|
296
|
+
model_call_id INTEGER REFERENCES model_calls(id),
|
|
297
|
+
deep_hash TEXT REFERENCES derivations(deep_hash),
|
|
298
|
+
PRIMARY KEY (turn_id, kind)
|
|
299
|
+
) STRICT;
|
|
300
|
+
|
|
301
|
+
-- {§db-fk-indexes} A derivation replacement checks its referrers; the hash is indexed where it is a foreign key.
|
|
302
|
+
CREATE INDEX IF NOT EXISTS turn_sources_deep_hash ON turn_sources (deep_hash) WHERE deep_hash IS NOT NULL;
|
|
303
|
+
|
|
304
|
+
CREATE TRIGGER IF NOT EXISTS turn_sources_immutable
|
|
305
|
+
BEFORE UPDATE OF turn_id, kind, content, model_call_id ON turn_sources
|
|
306
|
+
BEGIN
|
|
307
|
+
SELECT RAISE(ABORT, 'turn source evidence is immutable');
|
|
308
|
+
END;
|
|
309
|
+
|
|
310
|
+
CREATE TRIGGER IF NOT EXISTS turn_sources_delete_with_turn_only
|
|
311
|
+
BEFORE DELETE ON turn_sources
|
|
312
|
+
WHEN EXISTS (SELECT 1 FROM turns WHERE id = OLD.turn_id)
|
|
313
|
+
BEGIN
|
|
314
|
+
SELECT RAISE(ABORT, 'turn source evidence belongs to its retained turn');
|
|
315
|
+
END;
|
|
316
|
+
|
|
317
|
+
-- {§turn-record} Producer and purpose never change beneath execution history.
|
|
318
|
+
CREATE TRIGGER IF NOT EXISTS turns_identity_forward_only
|
|
319
|
+
BEFORE UPDATE OF producer, kind ON turns
|
|
320
|
+
WHEN NOT (
|
|
321
|
+
OLD.producer = NEW.producer
|
|
322
|
+
AND OLD.kind = NEW.kind
|
|
323
|
+
)
|
|
324
|
+
BEGIN
|
|
325
|
+
SELECT RAISE(ABORT, 'turn producer and kind are immutable');
|
|
326
|
+
END;
|