@plurnk/plurnk-service 1.17.0 → 1.19.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 +95 -14
- package/README.md +5 -3
- package/SPEC.md +1756 -1442
- package/dist/Paths.js +3 -3
- package/dist/build-info.json +1 -1
- package/dist/content/body-preview.d.ts +1 -0
- package/dist/content/body-preview.d.ts.map +1 -1
- package/dist/content/body-preview.js +8 -10
- package/dist/content/body-preview.js.map +1 -1
- package/dist/content/edit-receipt.d.ts.map +1 -1
- package/dist/content/edit-receipt.js +30 -29
- package/dist/content/edit-receipt.js.map +1 -1
- package/dist/content/line-anchors.d.ts.map +1 -1
- package/dist/content/line-anchors.js +17 -5
- package/dist/content/line-anchors.js.map +1 -1
- package/dist/content/read-projector.d.ts +2 -2
- package/dist/content/read-projector.d.ts.map +1 -1
- package/dist/content/read-projector.js +81 -39
- package/dist/content/read-projector.js.map +1 -1
- package/dist/content/read-resolve.d.ts +1 -0
- package/dist/content/read-resolve.d.ts.map +1 -1
- package/dist/content/read-resolve.js +13 -10
- package/dist/content/read-resolve.js.map +1 -1
- package/dist/content/scope-format.d.ts +9 -0
- package/dist/content/scope-format.d.ts.map +1 -0
- package/dist/content/scope-format.js +28 -0
- package/dist/content/scope-format.js.map +1 -0
- package/dist/core/AdministrativeLoop.d.ts +8 -0
- package/dist/core/AdministrativeLoop.d.ts.map +1 -0
- package/dist/core/AdministrativeLoop.js +16 -0
- package/dist/core/AdministrativeLoop.js.map +1 -0
- package/dist/core/AdmittedTurnExecutor.d.ts +2 -2
- package/dist/core/AdmittedTurnExecutor.d.ts.map +1 -1
- package/dist/core/AdmittedTurnExecutor.js +26 -26
- package/dist/core/AdmittedTurnExecutor.js.map +1 -1
- package/dist/core/BareBatchRunner.d.ts +1 -2
- package/dist/core/BareBatchRunner.d.ts.map +1 -1
- package/dist/core/BareBatchRunner.js +7 -12
- package/dist/core/BareBatchRunner.js.map +1 -1
- package/dist/core/BudgetReadout.d.ts.map +1 -1
- package/dist/core/BudgetReadout.js +3 -4
- package/dist/core/BudgetReadout.js.map +1 -1
- package/dist/core/CapabilityPolicies.d.ts +4 -2
- package/dist/core/CapabilityPolicies.d.ts.map +1 -1
- package/dist/core/CapabilityPolicies.js +23 -2
- package/dist/core/CapabilityPolicies.js.map +1 -1
- package/dist/core/CapabilityResolver.d.ts +2 -2
- package/dist/core/CapabilityResolver.d.ts.map +1 -1
- package/dist/core/CapabilityResolver.js +46 -36
- package/dist/core/CapabilityResolver.js.map +1 -1
- package/dist/core/ChannelWrite.d.ts +4 -6
- package/dist/core/ChannelWrite.d.ts.map +1 -1
- package/dist/core/ChannelWrite.js +8 -8
- package/dist/core/ChannelWrite.js.map +1 -1
- package/dist/core/ChannelWrite.sql +17 -11
- package/dist/core/ClientInteractions.d.ts +11 -1
- package/dist/core/ClientInteractions.d.ts.map +1 -1
- package/dist/core/ClientInteractions.js +26 -2
- package/dist/core/ClientInteractions.js.map +1 -1
- package/dist/core/CoreSchemeServices.d.ts.map +1 -1
- package/dist/core/CoreSchemeServices.js +1 -0
- package/dist/core/CoreSchemeServices.js.map +1 -1
- package/dist/core/DataStatementRunner.d.ts.map +1 -1
- package/dist/core/DataStatementRunner.js +198 -148
- package/dist/core/DataStatementRunner.js.map +1 -1
- package/dist/core/Dispatcher.d.ts +18 -5
- package/dist/core/Dispatcher.d.ts.map +1 -1
- package/dist/core/Dispatcher.js +135 -114
- package/dist/core/Dispatcher.js.map +1 -1
- package/dist/core/Dispatcher.sql +11 -26
- package/dist/core/DurableStatement.d.ts +4 -1
- package/dist/core/DurableStatement.d.ts.map +1 -1
- package/dist/core/DurableStatement.js +4 -4
- package/dist/core/DurableStatement.js.map +1 -1
- package/dist/core/EditMutations.d.ts.map +1 -1
- package/dist/core/EditMutations.js +5 -2
- package/dist/core/EditMutations.js.map +1 -1
- package/dist/core/Engine.d.ts +11 -9
- package/dist/core/Engine.d.ts.map +1 -1
- package/dist/core/Engine.js +27 -65
- package/dist/core/Engine.js.map +1 -1
- package/dist/core/Engine.sql +2 -22
- package/dist/core/EnvFlags.d.ts.map +1 -1
- package/dist/core/EnvFlags.js +4 -2
- package/dist/core/EnvFlags.js.map +1 -1
- package/dist/core/ExecutionOutputs.sql +8 -0
- package/dist/core/ExecutorRegistry.d.ts +4 -0
- package/dist/core/ExecutorRegistry.d.ts.map +1 -1
- package/dist/core/ExecutorRegistry.js +3 -1
- package/dist/core/ExecutorRegistry.js.map +1 -1
- package/dist/core/KillHandler.d.ts.map +1 -1
- package/dist/core/KillHandler.js +7 -12
- package/dist/core/KillHandler.js.map +1 -1
- package/dist/core/Knob.d.ts +9 -0
- package/dist/core/Knob.d.ts.map +1 -0
- package/dist/core/Knob.js +50 -0
- package/dist/core/Knob.js.map +1 -0
- package/dist/core/LogBody.d.ts.map +1 -1
- package/dist/core/LogBody.js +8 -36
- package/dist/core/LogBody.js.map +1 -1
- package/dist/core/LogEntryProjection.d.ts.map +1 -1
- package/dist/core/LogEntryProjection.js +8 -10
- package/dist/core/LogEntryProjection.js.map +1 -1
- package/dist/core/LogVisibility.d.ts.map +1 -1
- package/dist/core/LogVisibility.js +2 -1
- package/dist/core/LogVisibility.js.map +1 -1
- package/dist/core/LogWriter.d.ts.map +1 -1
- package/dist/core/LogWriter.js +11 -9
- package/dist/core/LogWriter.js.map +1 -1
- package/dist/core/LoopDriver.d.ts +1 -1
- package/dist/core/LoopDriver.d.ts.map +1 -1
- package/dist/core/LoopDriver.js +24 -32
- package/dist/core/LoopDriver.js.map +1 -1
- package/dist/core/LoopLifecycle.d.ts +4 -17
- package/dist/core/LoopLifecycle.d.ts.map +1 -1
- package/dist/core/LoopLifecycle.js +20 -22
- package/dist/core/LoopLifecycle.js.map +1 -1
- package/dist/core/LoopLifecycle.sql +36 -49
- package/dist/core/LoopOutcome.d.ts +10 -0
- package/dist/core/LoopOutcome.d.ts.map +1 -0
- package/dist/core/LoopOutcome.js +28 -0
- package/dist/core/LoopOutcome.js.map +1 -0
- package/dist/core/LoopPolicies.d.ts +7 -0
- package/dist/core/LoopPolicies.d.ts.map +1 -0
- package/dist/core/LoopPolicies.js +37 -0
- package/dist/core/LoopPolicies.js.map +1 -0
- package/dist/core/MessageResources.d.ts +15 -0
- package/dist/core/MessageResources.d.ts.map +1 -0
- package/dist/core/MessageResources.js +46 -0
- package/dist/core/MessageResources.js.map +1 -0
- package/dist/core/MessageResources.sql +36 -0
- 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 +7 -36
- package/dist/core/OperatorConfig.d.ts +2 -1
- package/dist/core/OperatorConfig.d.ts.map +1 -1
- package/dist/core/OperatorConfig.js +14 -6
- package/dist/core/OperatorConfig.js.map +1 -1
- package/dist/core/PacketBuilder.d.ts.map +1 -1
- package/dist/core/PacketBuilder.js +20 -35
- package/dist/core/PacketBuilder.js.map +1 -1
- package/dist/core/PacketBuilder.sql +24 -6
- package/dist/core/PatternSelection.d.ts +1 -1
- package/dist/core/PatternSelection.d.ts.map +1 -1
- package/dist/core/ProposalLifecycle.d.ts +3 -1
- package/dist/core/ProposalLifecycle.d.ts.map +1 -1
- package/dist/core/ProposalLifecycle.js +93 -28
- package/dist/core/ProposalLifecycle.js.map +1 -1
- package/dist/core/ProviderInstantiate.d.ts +1 -0
- package/dist/core/ProviderInstantiate.d.ts.map +1 -1
- package/dist/core/ProviderInstantiate.js +12 -7
- package/dist/core/ProviderInstantiate.js.map +1 -1
- package/dist/core/ReasoningView.d.ts +1 -2
- package/dist/core/ReasoningView.d.ts.map +1 -1
- package/dist/core/ReasoningView.js +9 -20
- package/dist/core/ReasoningView.js.map +1 -1
- package/dist/core/ResourceBindings.d.ts.map +1 -1
- package/dist/core/ResourceBindings.js +5 -4
- package/dist/core/ResourceBindings.js.map +1 -1
- package/dist/core/ResourceMutations.d.ts +4 -4
- package/dist/core/ResourceMutations.d.ts.map +1 -1
- package/dist/core/ResourceMutations.js +2 -3
- package/dist/core/ResourceMutations.js.map +1 -1
- package/dist/core/ResourceSelector.d.ts +10 -3
- package/dist/core/ResourceSelector.d.ts.map +1 -1
- package/dist/core/ResourceSelector.js +52 -13
- package/dist/core/ResourceSelector.js.map +1 -1
- package/dist/core/ResourceTransfers.d.ts.map +1 -1
- package/dist/core/ResourceTransfers.js +4 -2
- package/dist/core/ResourceTransfers.js.map +1 -1
- package/dist/core/RuntimeWorker.d.ts.map +1 -1
- package/dist/core/RuntimeWorker.js +6 -1
- package/dist/core/RuntimeWorker.js.map +1 -1
- package/dist/core/RuntimeWorker.sql +7 -1
- package/dist/core/SchemeRegistry.d.ts +2 -0
- package/dist/core/SchemeRegistry.d.ts.map +1 -1
- package/dist/core/SchemeRegistry.js +12 -6
- package/dist/core/SchemeRegistry.js.map +1 -1
- package/dist/core/StoredPacket.d.ts +3 -1
- package/dist/core/StoredPacket.d.ts.map +1 -1
- package/dist/core/StoredPacket.js +7 -3
- package/dist/core/StoredPacket.js.map +1 -1
- package/dist/core/StrikeRail.d.ts +2 -2
- package/dist/core/StrikeRail.d.ts.map +1 -1
- package/dist/core/StrikeRail.js +15 -7
- package/dist/core/StrikeRail.js.map +1 -1
- package/dist/core/TerminalResult.d.ts +2 -2
- package/dist/core/TerminalResult.d.ts.map +1 -1
- package/dist/core/TerminalResult.js +15 -8
- package/dist/core/TerminalResult.js.map +1 -1
- package/dist/core/ToolInputSchema.d.ts.map +1 -1
- package/dist/core/ToolInputSchema.js +24 -8
- package/dist/core/ToolInputSchema.js.map +1 -1
- package/dist/core/ToolResources.d.ts +1 -0
- package/dist/core/ToolResources.d.ts.map +1 -1
- package/dist/core/ToolResources.js +50 -26
- package/dist/core/ToolResources.js.map +1 -1
- package/dist/core/Turn.d.ts +3 -1
- package/dist/core/Turn.d.ts.map +1 -1
- package/dist/core/Turn.js +4 -1
- package/dist/core/Turn.js.map +1 -1
- package/dist/core/Turn.sql +14 -2
- package/dist/core/TurnDispositionHandler.d.ts +13 -23
- package/dist/core/TurnDispositionHandler.d.ts.map +1 -1
- package/dist/core/TurnDispositionHandler.js +30 -180
- package/dist/core/TurnDispositionHandler.js.map +1 -1
- package/dist/core/TurnMaterialization.d.ts +9 -7
- package/dist/core/TurnMaterialization.d.ts.map +1 -1
- package/dist/core/TurnMaterialization.js +66 -46
- package/dist/core/TurnMaterialization.js.map +1 -1
- package/dist/core/TurnMaterialization.sql +23 -6
- package/dist/core/TurnOps.d.ts.map +1 -1
- package/dist/core/TurnOps.js +2 -2
- package/dist/core/TurnOps.js.map +1 -1
- package/dist/core/TurnRunner.d.ts +2 -8
- package/dist/core/TurnRunner.d.ts.map +1 -1
- package/dist/core/TurnRunner.js +1116 -1123
- package/dist/core/TurnRunner.js.map +1 -1
- package/dist/core/TurnRunner.sql +1 -24
- package/dist/core/TurnSources.sql +42 -11
- package/dist/core/WorkerControlHandler.d.ts.map +1 -1
- package/dist/core/WorkerControlHandler.js +23 -0
- package/dist/core/WorkerControlHandler.js.map +1 -1
- package/dist/core/WorkerName.d.ts +3 -6
- package/dist/core/WorkerName.d.ts.map +1 -1
- package/dist/core/WorkerName.js +10 -26
- package/dist/core/WorkerName.js.map +1 -1
- package/dist/core/WorkspaceGate.js +4 -4
- package/dist/core/WorkspaceGate.js.map +1 -1
- package/dist/core/ambient.sql +45 -19
- package/dist/core/attachments.d.ts +3 -1
- package/dist/core/attachments.d.ts.map +1 -1
- package/dist/core/attachments.js +4 -0
- package/dist/core/attachments.js.map +1 -1
- package/dist/core/caps/CoreInteractionCaps.d.ts +1 -1
- package/dist/core/caps/CoreInteractionCaps.d.ts.map +1 -1
- package/dist/core/caps/CoreInteractionCaps.js +4 -2
- package/dist/core/caps/CoreInteractionCaps.js.map +1 -1
- package/dist/core/caps/DbChannelCaps.js +6 -6
- package/dist/core/caps/DbChannelCaps.js.map +1 -1
- package/dist/core/caps/DbEntryCaps.js +1 -1
- package/dist/core/caps/DbEntryCaps.js.map +1 -1
- package/dist/core/caps/DbMessageCaps.d.ts +10 -0
- package/dist/core/caps/DbMessageCaps.d.ts.map +1 -0
- package/dist/core/caps/DbMessageCaps.js +39 -0
- package/dist/core/caps/DbMessageCaps.js.map +1 -0
- package/dist/core/caps/DbProjectionCaps.d.ts +2 -2
- package/dist/core/caps/DbProjectionCaps.d.ts.map +1 -1
- package/dist/core/caps/DbProjectionCaps.js +10 -4
- package/dist/core/caps/DbProjectionCaps.js.map +1 -1
- package/dist/core/caps/SchemeCtxImpl.d.ts +3 -1
- package/dist/core/caps/SchemeCtxImpl.d.ts.map +1 -1
- package/dist/core/caps/SchemeCtxImpl.js +11 -0
- 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/file-materialization.js +1 -1
- package/dist/core/file-materialization.js.map +1 -1
- package/dist/core/fork.sql +7 -6
- package/dist/core/git-state.d.ts +3 -2
- package/dist/core/git-state.d.ts.map +1 -1
- package/dist/core/git-state.js +38 -21
- package/dist/core/git-state.js.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.js +1 -1
- package/dist/core/packet-wire.d.ts +11 -0
- package/dist/core/packet-wire.d.ts.map +1 -1
- package/dist/core/packet-wire.js +382 -333
- package/dist/core/packet-wire.js.map +1 -1
- package/dist/core/plurnk-uri.d.ts +4 -5
- package/dist/core/plurnk-uri.d.ts.map +1 -1
- package/dist/core/plurnk-uri.js +10 -31
- package/dist/core/plurnk-uri.js.map +1 -1
- package/dist/core/scheme-types.d.ts +3 -1
- package/dist/core/scheme-types.d.ts.map +1 -1
- package/dist/core/scheme-types.js +1 -1
- package/dist/core/scheme-types.js.map +1 -1
- package/dist/core/teaching.d.ts.map +1 -1
- package/dist/core/teaching.js +2 -1
- package/dist/core/teaching.js.map +1 -1
- package/dist/core/types.d.ts +1 -2
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/worker-ops.sql +3 -8
- package/dist/digest/Digest.d.ts.map +1 -1
- package/dist/digest/Digest.js +37 -30
- package/dist/digest/Digest.js.map +1 -1
- package/dist/digest/DigestRender.d.ts +2 -0
- package/dist/digest/DigestRender.d.ts.map +1 -1
- package/dist/digest/DigestRender.js +97 -9
- package/dist/digest/DigestRender.js.map +1 -1
- package/dist/digest/DigestRequiem.d.ts.map +1 -1
- package/dist/digest/DigestRequiem.js +13 -15
- package/dist/digest/DigestRequiem.js.map +1 -1
- package/dist/digest/digest-db.d.ts +3 -0
- package/dist/digest/digest-db.d.ts.map +1 -0
- package/dist/digest/digest-db.js +68 -0
- package/dist/digest/digest-db.js.map +1 -0
- package/dist/digest/digest-paths.d.ts +6 -0
- package/dist/digest/digest-paths.d.ts.map +1 -0
- package/dist/digest/digest-paths.js +23 -0
- package/dist/digest/digest-paths.js.map +1 -0
- package/dist/digest/digest-rows.d.ts +21 -0
- package/dist/digest/digest-rows.d.ts.map +1 -1
- package/dist/digest/digest.sql +24 -5
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/observe/genai.d.ts +2 -2
- package/dist/observe/genai.d.ts.map +1 -1
- package/dist/observe/genai.js +15 -5
- package/dist/observe/genai.js.map +1 -1
- package/dist/schemes/EffectPolicy.d.ts +0 -2
- package/dist/schemes/EffectPolicy.d.ts.map +1 -1
- package/dist/schemes/EffectPolicy.js +25 -36
- package/dist/schemes/EffectPolicy.js.map +1 -1
- package/dist/schemes/Exec.d.ts +4 -5
- package/dist/schemes/Exec.d.ts.map +1 -1
- package/dist/schemes/Exec.js +129 -82
- package/dist/schemes/Exec.js.map +1 -1
- package/dist/schemes/ExecOutputScheme.d.ts +6 -5
- package/dist/schemes/ExecOutputScheme.d.ts.map +1 -1
- package/dist/schemes/ExecOutputScheme.js +49 -16
- 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/File.d.ts.map +1 -1
- package/dist/schemes/File.js +30 -21
- package/dist/schemes/File.js.map +1 -1
- package/dist/schemes/Log.d.ts +4 -4
- package/dist/schemes/Log.d.ts.map +1 -1
- package/dist/schemes/Log.js +30 -10
- package/dist/schemes/Log.js.map +1 -1
- package/dist/schemes/QuestionTool.d.ts.map +1 -1
- package/dist/schemes/QuestionTool.js +15 -2
- package/dist/schemes/QuestionTool.js.map +1 -1
- package/dist/schemes/TurnSource.d.ts +3 -2
- package/dist/schemes/TurnSource.d.ts.map +1 -1
- package/dist/schemes/TurnSource.js +87 -41
- package/dist/schemes/TurnSource.js.map +1 -1
- package/dist/schemes/Worker.d.ts.map +1 -1
- package/dist/schemes/Worker.js +22 -56
- package/dist/schemes/Worker.js.map +1 -1
- package/dist/schemes/_entry-crud.js +6 -6
- package/dist/schemes/_entry-crud.js.map +1 -1
- package/dist/schemes/_entry-crud.sql +37 -17
- package/dist/schemes/_entry-find.d.ts.map +1 -1
- package/dist/schemes/_entry-find.js +6 -5
- package/dist/schemes/_entry-find.js.map +1 -1
- package/dist/schemes/_entry-fts.d.ts.map +1 -1
- package/dist/schemes/_entry-fts.js +6 -3
- package/dist/schemes/_entry-fts.js.map +1 -1
- package/dist/schemes/_entry-fts.sql +25 -6
- package/dist/schemes/_entry-manifest.d.ts +1 -1
- package/dist/schemes/_entry-manifest.d.ts.map +1 -1
- package/dist/schemes/_entry-manifest.js +10 -17
- package/dist/schemes/_entry-manifest.js.map +1 -1
- package/dist/schemes/_entry-manifest.sql +1 -1
- package/dist/schemes/_entry-ops.js +4 -4
- package/dist/schemes/_entry-ops.js.map +1 -1
- package/dist/schemes/_entry-ops.sql +2 -2
- package/dist/schemes/_entry-readable.d.ts.map +1 -1
- package/dist/schemes/_entry-readable.js +5 -4
- package/dist/schemes/_entry-readable.js.map +1 -1
- package/dist/schemes/_entry-send.js +2 -2
- package/dist/schemes/_entry-send.js.map +1 -1
- package/dist/schemes/_search-exclusion.d.ts +1 -0
- package/dist/schemes/_search-exclusion.d.ts.map +1 -1
- package/dist/schemes/_search-exclusion.js +12 -0
- package/dist/schemes/_search-exclusion.js.map +1 -1
- package/dist/schemes/_search-index.d.ts +5 -1
- package/dist/schemes/_search-index.d.ts.map +1 -1
- package/dist/schemes/_search-index.js +99 -59
- package/dist/schemes/_search-index.js.map +1 -1
- package/dist/schemes/_search-index.sql +17 -0
- package/dist/schemes/exec-abort.d.ts.map +1 -1
- package/dist/schemes/exec-abort.js +5 -4
- 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-lifetime.d.ts +11 -0
- package/dist/schemes/exec-lifetime.d.ts.map +1 -0
- package/dist/schemes/exec-lifetime.js +29 -0
- package/dist/schemes/exec-lifetime.js.map +1 -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 +1 -1
- package/dist/schemes/exec-runtime.js.map +1 -1
- package/dist/server/ClientReads.d.ts.map +1 -1
- package/dist/server/ClientReads.js +5 -2
- package/dist/server/ClientReads.js.map +1 -1
- package/dist/server/Daemon.d.ts +31 -7
- package/dist/server/Daemon.d.ts.map +1 -1
- package/dist/server/Daemon.js +137 -60
- package/dist/server/Daemon.js.map +1 -1
- package/dist/server/DaemonModule.d.ts +25 -6
- package/dist/server/DaemonModule.d.ts.map +1 -1
- package/dist/server/DrainSupervisor.d.ts +13 -11
- package/dist/server/DrainSupervisor.d.ts.map +1 -1
- package/dist/server/DrainSupervisor.js +87 -98
- package/dist/server/DrainSupervisor.js.map +1 -1
- package/dist/server/EnvFunctionality.d.ts +52 -0
- package/dist/server/EnvFunctionality.d.ts.map +1 -0
- package/dist/server/EnvFunctionality.js +199 -0
- package/dist/server/EnvFunctionality.js.map +1 -0
- package/dist/server/Functionality.d.ts +4 -2
- package/dist/server/Functionality.d.ts.map +1 -1
- package/dist/server/Functionality.js +250 -106
- package/dist/server/Functionality.js.map +1 -1
- package/dist/server/FunctionalityManager.d.ts +5 -1
- package/dist/server/FunctionalityManager.d.ts.map +1 -1
- package/dist/server/FunctionalityManager.js +24 -8
- package/dist/server/FunctionalityManager.js.map +1 -1
- package/dist/server/HttpListener.d.ts +16 -0
- package/dist/server/HttpListener.d.ts.map +1 -0
- package/dist/server/HttpListener.js +81 -0
- package/dist/server/HttpListener.js.map +1 -0
- package/dist/server/MembersFunctionality.d.ts.map +1 -1
- package/dist/server/MembersFunctionality.js +12 -17
- package/dist/server/MembersFunctionality.js.map +1 -1
- package/dist/server/PlurnkSkill.d.ts.map +1 -1
- package/dist/server/PlurnkSkill.js +1 -0
- package/dist/server/PlurnkSkill.js.map +1 -1
- package/dist/server/Retention.d.ts +14 -0
- package/dist/server/Retention.d.ts.map +1 -1
- package/dist/server/Retention.js +52 -4
- package/dist/server/Retention.js.map +1 -1
- package/dist/server/Retention.sql +55 -1
- package/dist/server/ServiceModules.d.ts.map +1 -1
- package/dist/server/ServiceModules.js +2 -0
- package/dist/server/ServiceModules.js.map +1 -1
- package/dist/server/SkillsFunctionality.d.ts +2 -0
- package/dist/server/SkillsFunctionality.d.ts.map +1 -1
- package/dist/server/SkillsFunctionality.js +27 -17
- package/dist/server/SkillsFunctionality.js.map +1 -1
- package/dist/server/WorkspaceCapabilities.d.ts.map +1 -1
- package/dist/server/WorkspaceCapabilities.js +1 -0
- package/dist/server/WorkspaceCapabilities.js.map +1 -1
- package/dist/server/WorkspaceResidency.d.ts +2 -0
- package/dist/server/WorkspaceResidency.d.ts.map +1 -1
- package/dist/server/WorkspaceResidency.js +27 -0
- package/dist/server/WorkspaceResidency.js.map +1 -1
- package/dist/server/WorkspaceStorage.d.ts +8 -0
- package/dist/server/WorkspaceStorage.d.ts.map +1 -0
- package/dist/server/WorkspaceStorage.js +26 -0
- package/dist/server/WorkspaceStorage.js.map +1 -0
- package/dist/server/client-input.d.ts +4 -3
- package/dist/server/client-input.d.ts.map +1 -1
- package/dist/server/client-input.js +25 -27
- package/dist/server/client-input.js.map +1 -1
- package/dist/server/dispatch-as-plurnk.js +2 -2
- package/dist/server/dispatch-as-plurnk.js.map +1 -1
- package/dist/server/drain.sql +69 -132
- package/dist/server/envelope.d.ts +2 -3
- package/dist/server/envelope.d.ts.map +1 -1
- package/dist/server/envelope.js +7 -21
- package/dist/server/envelope.js.map +1 -1
- package/dist/server/envelope.sql +10 -6
- package/dist/server/exec-poll-backoff.js +3 -3
- package/dist/server/exec-poll-backoff.js.map +1 -1
- package/dist/server/lifecycle-recovery.sql +12 -38
- package/dist/server/logEntry.sql +2 -2
- package/dist/server/loopDocs.js +3 -3
- package/dist/server/loopDocs.sql +4 -2
- package/dist/server/model-catalog.d.ts.map +1 -1
- package/dist/server/model-catalog.js +2 -2
- package/dist/server/model-catalog.js.map +1 -1
- package/dist/server/seam-loop.sql +0 -1
- package/dist/server/workspace-capabilities.sql +45 -0
- package/dist/server/workspace-storage.sql +8 -0
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +37 -11
- package/dist/service.js.map +1 -1
- package/docs/copy-move.md +31 -0
- package/docs/env.md +67 -0
- package/docs/members.md +4 -4
- package/docs/skills.md +2 -2
- package/migrations/002_workers.sql +41 -17
- package/migrations/003_loops.sql +82 -28
- package/migrations/004_inference.sql +53 -12
- package/migrations/005_entries.sql +135 -14
- package/migrations/006_log.sql +79 -24
- package/migrations/007_subscriptions.sql +10 -15
- package/package.json +45 -36
- package/dist/core/PromptFrames.d.ts +0 -12
- package/dist/core/PromptFrames.d.ts.map +0 -1
- package/dist/core/PromptFrames.js +0 -28
- package/dist/core/PromptFrames.js.map +0 -1
- package/dist/schemes/Prompt.d.ts +0 -8
- package/dist/schemes/Prompt.d.ts.map +0 -1
- package/dist/schemes/Prompt.js +0 -25
- package/dist/schemes/Prompt.js.map +0 -1
|
@@ -17,8 +17,8 @@ export interface WorkerRow {
|
|
|
17
17
|
lifecycle: WorkerLifecycle;
|
|
18
18
|
}
|
|
19
19
|
export declare const projectWorkerRow: <T extends {
|
|
20
|
-
|
|
21
|
-
}>(row: T) => Omit<T, "
|
|
20
|
+
loopObservations: string;
|
|
21
|
+
}>(row: T) => Omit<T, "loopObservations"> & {
|
|
22
22
|
lifecycle: WorkerLifecycle;
|
|
23
23
|
};
|
|
24
24
|
export interface WorkerQuery {
|
|
@@ -51,7 +51,6 @@ export default class Envelope {
|
|
|
51
51
|
name: string;
|
|
52
52
|
}>;
|
|
53
53
|
static ensureModelWorker(db: Db, workspaceId: number): Promise<number>;
|
|
54
|
-
static ensurePlurnkWorker(db: Db, workspaceId: number): Promise<number>;
|
|
55
54
|
static listWorkersForWorkspace(db: Db, workspaceId: number, query?: WorkerQuery): Promise<WorkerRow[]>;
|
|
56
55
|
static listPromptsForWorkspace(db: Db, workspaceId: number, limit: number): Promise<string[]>;
|
|
57
56
|
static closeClientLoop(db: Db, loopId: number, result: SchemeResult): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../../src/server/envelope.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../../src/server/envelope.ts"],"names":[],"mappings":"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"}
|
package/dist/server/envelope.js
CHANGED
|
@@ -3,17 +3,18 @@
|
|
|
3
3
|
// A client-interface module receives this value from an explicit workspace create
|
|
4
4
|
// or attach call. Core creates or selects the client worker but retains no transport
|
|
5
5
|
// binding; each dispatched client action allocates and settles its own administrative loop.
|
|
6
|
+
import AdministrativeLoop from "../core/AdministrativeLoop.js";
|
|
6
7
|
import { randomBytes } from "node:crypto";
|
|
7
8
|
import GitMembership from "../core/git-membership.js";
|
|
8
9
|
import Results, { OperationFailureError } from "../core/results.js";
|
|
9
10
|
import LoopLifecycle from "../core/LoopLifecycle.js";
|
|
10
11
|
import WorkerName from "../core/WorkerName.js";
|
|
11
|
-
import { lifecycleOfLoopStatus } from "@plurnk/plurnk-contracts";
|
|
12
|
+
import { lifecycleOfLoopStatus, selectWorkerLoop } from "@plurnk/plurnk-contracts";
|
|
12
13
|
const envelopeFailure = (owner, code, status, detail, extensions = {}) => new OperationFailureError(Results.failure(owner, code, status, detail, {}, extensions));
|
|
13
|
-
// The SQL projects the latest loop's status; the shared vocabulary turns it into a lifecycle word.
|
|
14
14
|
export const projectWorkerRow = (row) => {
|
|
15
|
-
const {
|
|
16
|
-
|
|
15
|
+
const { loopObservations, ...rest } = row;
|
|
16
|
+
const loops = JSON.parse(loopObservations);
|
|
17
|
+
return { ...rest, lifecycle: lifecycleOfLoopStatus(selectWorkerLoop(loops)?.status) };
|
|
17
18
|
};
|
|
18
19
|
export default class Envelope {
|
|
19
20
|
// {§workspace-auto-name} — five characters from the line-anchor alphabet, no prefix:
|
|
@@ -110,10 +111,7 @@ export default class Envelope {
|
|
|
110
111
|
// Client action loop allocator. One action allocates one administrative
|
|
111
112
|
// loop; its statements become ordered turns and settlement closes the loop.
|
|
112
113
|
static async ensureClientLoop(db, workerId) {
|
|
113
|
-
|
|
114
|
-
if (loop === undefined)
|
|
115
|
-
throw new Error("ensureClientLoop: loop insert returned no row");
|
|
116
|
-
return loop.id;
|
|
114
|
+
return (await AdministrativeLoop.open(db, workerId)).id;
|
|
117
115
|
}
|
|
118
116
|
// Lazy model-worker allocator ({§connection-lifecycle}, {§machine-processes} — the client writes to its own worker).
|
|
119
117
|
// The model's conversation lives in its own worker, distinct from the client's
|
|
@@ -146,18 +144,6 @@ export default class Envelope {
|
|
|
146
144
|
});
|
|
147
145
|
return worker.id;
|
|
148
146
|
}
|
|
149
|
-
// Self-hosting keystone ({§actor-boundary-self-hosting}): the workspace's
|
|
150
|
-
// reserved `plurnk` worker. One durable worker per workspace, reused across
|
|
151
|
-
// the ephemeral administrative loops that dispatch ordinary runtime-owned ops.
|
|
152
|
-
static async ensurePlurnkWorker(db, workspaceId) {
|
|
153
|
-
const existing = await db.envelope_get_worker_by_name.get({ workspace_id: workspaceId, name: "plurnk" });
|
|
154
|
-
if (existing !== undefined)
|
|
155
|
-
return existing.id;
|
|
156
|
-
const worker = await db.envelope_insert_worker.get({ workspace_id: workspaceId, name: "plurnk", origin: "_plurnk" });
|
|
157
|
-
if (worker === undefined)
|
|
158
|
-
throw new Error("ensurePlurnkWorker: worker insert returned no row");
|
|
159
|
-
return worker.id;
|
|
160
|
-
}
|
|
161
147
|
static async listWorkersForWorkspace(db, workspaceId, query = {}) {
|
|
162
148
|
const filterParent = Object.hasOwn(query, "parentWorkerId");
|
|
163
149
|
const rows = await db.envelope_list_workers_for_workspace.all({
|
|
@@ -177,7 +163,7 @@ export default class Envelope {
|
|
|
177
163
|
static async closeClientLoop(db, loopId, result) {
|
|
178
164
|
const exact = structuredClone(Results.assert(result));
|
|
179
165
|
if (exact.problem !== undefined && exact.problem.instance === undefined) {
|
|
180
|
-
Results.attachInstance(exact,
|
|
166
|
+
Results.attachInstance(exact, await LoopLifecycle.address(db, loopId));
|
|
181
167
|
}
|
|
182
168
|
await db.envelope_close_client_loop.run({
|
|
183
169
|
status: LoopLifecycle.projectStatus(exact.status),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/server/envelope.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,EAAE;AACF,kFAAkF;AAClF,qFAAqF;AACrF,4FAA4F;
|
|
1
|
+
{"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/server/envelope.ts"],"names":[],"mappings":"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"}
|
package/dist/server/envelope.sql
CHANGED
|
@@ -34,14 +34,15 @@ VALUES ($workspace_id, $name, $origin)
|
|
|
34
34
|
RETURNING id, name, origin;
|
|
35
35
|
|
|
36
36
|
-- {§application-worker-observation}: kind is minted lineage (fork boundary → fork, other child →
|
|
37
|
-
-- work, root → conversation);
|
|
37
|
+
-- work, root → conversation); loop observations feed the shared lifecycle selector in TS.
|
|
38
38
|
-- PREP: envelope_get_worker_by_id
|
|
39
39
|
SELECT id, name, workspace_id, created_at, origin,
|
|
40
40
|
parent_worker_id AS parentWorkerId,
|
|
41
41
|
CASE WHEN fork_event_boundary IS NOT NULL THEN 'fork'
|
|
42
42
|
WHEN parent_worker_id IS NOT NULL THEN 'work'
|
|
43
43
|
ELSE 'conversation' END AS kind,
|
|
44
|
-
(SELECT l.status
|
|
44
|
+
(SELECT json_group_array(json_object('status', l.status, 'sequence', l.sequence, 'terminatedAt', l.terminated_at))
|
|
45
|
+
FROM work_loops l WHERE l.worker_id = workers.id) AS loopObservations
|
|
45
46
|
FROM workers
|
|
46
47
|
WHERE id = $id;
|
|
47
48
|
|
|
@@ -51,7 +52,8 @@ SELECT id, name, workspace_id, created_at, origin,
|
|
|
51
52
|
CASE WHEN fork_event_boundary IS NOT NULL THEN 'fork'
|
|
52
53
|
WHEN parent_worker_id IS NOT NULL THEN 'work'
|
|
53
54
|
ELSE 'conversation' END AS kind,
|
|
54
|
-
(SELECT l.status
|
|
55
|
+
(SELECT json_group_array(json_object('status', l.status, 'sequence', l.sequence, 'terminatedAt', l.terminated_at))
|
|
56
|
+
FROM work_loops l WHERE l.worker_id = workers.id) AS loopObservations
|
|
55
57
|
FROM workers
|
|
56
58
|
WHERE workspace_id = $workspace_id AND name = $name;
|
|
57
59
|
|
|
@@ -60,7 +62,8 @@ SELECT id, name, created_at, origin, parent_worker_id AS parentWorkerId,
|
|
|
60
62
|
CASE WHEN fork_event_boundary IS NOT NULL THEN 'fork'
|
|
61
63
|
WHEN parent_worker_id IS NOT NULL THEN 'work'
|
|
62
64
|
ELSE 'conversation' END AS kind,
|
|
63
|
-
(SELECT l.status
|
|
65
|
+
(SELECT json_group_array(json_object('status', l.status, 'sequence', l.sequence, 'terminatedAt', l.terminated_at))
|
|
66
|
+
FROM work_loops l WHERE l.worker_id = workers.id) AS loopObservations
|
|
64
67
|
FROM workers
|
|
65
68
|
WHERE workspace_id = $workspace_id
|
|
66
69
|
AND ($origin IS NULL OR origin = $origin)
|
|
@@ -129,8 +132,9 @@ LIMIT $limit;
|
|
|
129
132
|
-- PREP: envelope_insert_client_loop
|
|
130
133
|
-- sequence is auto-computed: 1 + max(existing sequence in this worker) so
|
|
131
134
|
-- multiple client connections attaching to the same worker get distinct loops.
|
|
132
|
-
|
|
133
|
-
|
|
135
|
+
-- An administrative loop runs no model turns, so no turn ceiling governs it (-1).
|
|
136
|
+
INSERT INTO loops (worker_id, sequence, status, prompt, policy, max_turns)
|
|
137
|
+
VALUES ($worker_id, COALESCE((SELECT MAX(sequence) FROM loops WHERE worker_id = $worker_id), 0) + 1, 102, '', $policy, -1)
|
|
134
138
|
RETURNING id, sequence;
|
|
135
139
|
|
|
136
140
|
-- PREP: envelope_close_client_loop
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
// {§exec-
|
|
2
|
-
//
|
|
3
|
-
//
|
|
1
|
+
// {§exec-lifetime} — the exponential backoff schedule for a parked exec stream: cadence is the
|
|
2
|
+
// daemon's alone. Wake N fires at base·2^min(N, turns-1) seconds — doubling for `turns` steps,
|
|
3
|
+
// then holding at the cap forever (never reverts to blind). Pure so the curve is testable
|
|
4
4
|
// without racing a real timer.
|
|
5
5
|
export const execPollBackoffMs = (step, baseSec, turns) => baseSec * 2 ** Math.min(Math.max(step, 0), Math.max(turns - 1, 0)) * 1000;
|
|
6
6
|
//# sourceMappingURL=exec-poll-backoff.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec-poll-backoff.js","sourceRoot":"","sources":["../../src/server/exec-poll-backoff.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"exec-poll-backoff.js","sourceRoot":"","sources":["../../src/server/exec-poll-backoff.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,+FAA+F;AAC/F,0FAA0F;AAC1F,+BAA+B;AAC/B,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAE,OAAe,EAAE,KAAa,EAAU,EAAE,CACtF,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC"}
|
|
@@ -14,7 +14,7 @@ SET status = 500,
|
|
|
14
14
|
'title', 'Owner vanished',
|
|
15
15
|
'status', 500,
|
|
16
16
|
'detail', 'The daemon restarted while this loop was active; its process-local owner no longer exists.',
|
|
17
|
-
'instance', '
|
|
17
|
+
'instance', 'ops://' || (SELECT name FROM workers WHERE workers.id = loops.worker_id) || '/' || sequence
|
|
18
18
|
)
|
|
19
19
|
)
|
|
20
20
|
WHERE status = 102;
|
|
@@ -35,8 +35,8 @@ WHERE state = 'pending'
|
|
|
35
35
|
-- PREP: recovery_fail_open_model_calls
|
|
36
36
|
-- The process-local model-call owner vanished. Physical requests have already
|
|
37
37
|
-- been settled above, preserving unknown evidence without fabricating zero use.
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
INSERT INTO model_call_observation (id, failure)
|
|
39
|
+
SELECT mc.id, json_object(
|
|
40
40
|
'status', 500,
|
|
41
41
|
'problem', json_object(
|
|
42
42
|
'type', 'https://problems.plurnk.xyz/lifecycle/recovery/owner-vanished',
|
|
@@ -45,7 +45,8 @@ SET failure = json_object(
|
|
|
45
45
|
'detail', 'The daemon restarted before this provider response was durably observed; whether the provider completed the call is unknown.'
|
|
46
46
|
)
|
|
47
47
|
)
|
|
48
|
-
|
|
48
|
+
FROM model_calls mc
|
|
49
|
+
WHERE (SELECT state FROM inference_calls WHERE id = mc.id) = 'pending';
|
|
49
50
|
|
|
50
51
|
-- PREP: recovery_fail_open_turns
|
|
51
52
|
-- Every open turn has lost its process-local producer, including a narrow crash
|
|
@@ -121,33 +122,19 @@ SET closed_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now'),
|
|
|
121
122
|
WHERE closed_at IS NULL;
|
|
122
123
|
|
|
123
124
|
-- PREP: recovery_resume_unblocked_parks
|
|
124
|
-
-- {§loop-wake-identity}: a persisted completion beats a future
|
|
125
|
-
-- only
|
|
125
|
+
-- {§loop-wake-identity}: a persisted completion beats a future observation. Otherwise
|
|
126
|
+
-- only a now-empty join wakes here; observation ownership is restored below
|
|
126
127
|
-- through the same scheduler used after a live park.
|
|
127
128
|
UPDATE loops
|
|
128
129
|
SET status = 100,
|
|
129
|
-
wait_deadline_at = NULL,
|
|
130
|
-
wait_poll_interval = NULL,
|
|
131
130
|
wait_poll_at = NULL
|
|
132
131
|
WHERE status = 202
|
|
133
132
|
AND (observed_wake_revision < (SELECT wake_revision FROM workers WHERE id = loops.worker_id)
|
|
134
|
-
OR (
|
|
135
|
-
|
|
136
|
-
AND NOT EXISTS (
|
|
137
|
-
SELECT 1
|
|
138
|
-
FROM subscriptions s
|
|
139
|
-
WHERE s.worker_id = loops.worker_id AND s.closed_at IS NULL
|
|
140
|
-
)
|
|
141
|
-
AND NOT EXISTS (
|
|
142
|
-
SELECT 1
|
|
143
|
-
FROM workers child
|
|
144
|
-
JOIN loops child_loop ON child_loop.worker_id = child.id
|
|
145
|
-
WHERE child.parent_worker_id = loops.worker_id
|
|
146
|
-
AND child_loop.status IN (100, 102, 202)
|
|
147
|
-
)));
|
|
133
|
+
OR EXISTS (SELECT 1 FROM loop_obligations held WHERE held.loop_id = loops.id
|
|
134
|
+
AND held.streams = 0 AND held.workers = 0));
|
|
148
135
|
|
|
149
|
-
-- PREP:
|
|
150
|
-
-- {§
|
|
136
|
+
-- PREP: recovery_orphan_message_sources
|
|
137
|
+
-- {§message-loop-containment}: finish an absent or partially staged orphan
|
|
151
138
|
-- recovery before queued drains become visible at boot. A non-queued recovery
|
|
152
139
|
-- already crossed its delivery boundary and must never be replayed.
|
|
153
140
|
SELECT source.id AS loop_id, source.worker_id AS worker_id, w.origin
|
|
@@ -158,21 +145,8 @@ WHERE source.status IN (200, 413, 429, 499, 500, 504, 508)
|
|
|
158
145
|
AND source.terminated_by IS NOT 'cancel'
|
|
159
146
|
AND source.sequence > w.cancelled_through_sequence
|
|
160
147
|
AND (recovery.id IS NULL OR recovery.status = 100)
|
|
161
|
-
AND EXISTS (
|
|
162
|
-
SELECT 1
|
|
163
|
-
FROM entries e
|
|
164
|
-
JOIN entry_channels c ON c.entry_id = e.id AND c.name = 'body'
|
|
165
|
-
WHERE e.scheme = 'prompt'
|
|
166
|
-
AND e.workspace_id = w.workspace_id AND e.authority = w.name
|
|
167
|
-
AND e.pathname LIKE '/' || source.sequence || '/%'
|
|
168
|
-
AND NOT EXISTS (
|
|
169
|
-
SELECT 1 FROM log_entries le
|
|
170
|
-
WHERE le.loop_id = source.id AND le.origin = '_plurnk' AND le.op = 'prompt'
|
|
171
|
-
AND le.scheme = 'prompt' AND le.pathname = e.pathname
|
|
172
|
-
)
|
|
173
|
-
)
|
|
148
|
+
AND EXISTS (SELECT 1 FROM loop_messages m WHERE m.loop_id = source.id AND m.ordinal > 1 AND m.log_entry_id IS NULL)
|
|
174
149
|
ORDER BY source.worker_id, source.sequence;
|
|
175
|
-
|
|
176
150
|
-- PREP: recovery_queued_workers
|
|
177
151
|
SELECT DISTINCT w.id AS worker_id, w.workspace_id, w.origin
|
|
178
152
|
FROM workers w
|
package/dist/server/logEntry.sql
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
SELECT le.*, l.sequence AS loop_seq, t.sequence AS turn_seq,
|
|
7
7
|
CASE
|
|
8
8
|
WHEN le.origin = 'model'
|
|
9
|
-
AND le.op IN ('SEND', '
|
|
9
|
+
AND le.op IN ('SEND', 'NOTE', 'WAIT')
|
|
10
10
|
AND json_type(t.packet, '$.assistant.reasoning') = 'text'
|
|
11
11
|
AND length(json_extract(t.packet, '$.assistant.reasoning')) > 0
|
|
12
12
|
THEN json_extract(t.packet, '$.assistant.reasoning')
|
|
@@ -22,7 +22,7 @@ WHERE le.id = $id;
|
|
|
22
22
|
SELECT le.*, l.sequence AS loop_seq, t.sequence AS turn_seq,
|
|
23
23
|
CASE
|
|
24
24
|
WHEN le.origin = 'model'
|
|
25
|
-
AND le.op IN ('SEND', '
|
|
25
|
+
AND le.op IN ('SEND', 'NOTE', 'WAIT')
|
|
26
26
|
AND json_type(t.packet, '$.assistant.reasoning') = 'text'
|
|
27
27
|
AND length(json_extract(t.packet, '$.assistant.reasoning')) > 0
|
|
28
28
|
THEN json_extract(t.packet, '$.assistant.reasoning')
|
package/dist/server/loopDocs.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Worker documentation projections of the shared workspace environment.
|
|
2
2
|
// Reconcile on reader demand and after workspace Functionality changes. Two private sets run through
|
|
3
3
|
// an ordinary `_plurnk` turn in the addressed worker ({§actor-boundary-doc-injection}):
|
|
4
|
-
// 1. the project AGENTS.md at worker:///_plurnk/
|
|
4
|
+
// 1. the project AGENTS.md at worker:///_plurnk/AGENTS.md — Engine.runTurn foists
|
|
5
5
|
// its READ at turn 0 ({§turn0-agents-stunt});
|
|
6
6
|
// 2. the exact current scheme and executable-tool reference set under
|
|
7
7
|
// worker:///_plurnk/plurnk/ and worker:///_plurnk/tools/ — discovered by the
|
|
@@ -79,7 +79,7 @@ export default class LoopDocs {
|
|
|
79
79
|
}
|
|
80
80
|
static async #materialize(engine, db, workspaceId) {
|
|
81
81
|
// {§turn0-agents-stunt} — the project's AGENTS.md becomes one
|
|
82
|
-
// shared worker:///_plurnk/
|
|
82
|
+
// shared worker:///_plurnk/AGENTS.md entry, read at turn 0.
|
|
83
83
|
const workspace = await db.envelope_get_workspace.get({
|
|
84
84
|
id: workspaceId,
|
|
85
85
|
});
|
|
@@ -91,7 +91,7 @@ export default class LoopDocs {
|
|
|
91
91
|
: await readFile(join(workspace.project_root, "AGENTS.md"), "utf8").catch(() => null);
|
|
92
92
|
const desired = new Map((await engine.referenceEntries(workspaceId)).map(({ pathname, content }) => [pathname, content]));
|
|
93
93
|
if (agentsContent !== null)
|
|
94
|
-
desired.set(generatedPathname("/
|
|
94
|
+
desired.set(generatedPathname("/AGENTS.md"), agentsContent);
|
|
95
95
|
// #346 — nested AGENTS.md honor the standard's closest-file scope:
|
|
96
96
|
// each materializes at _plurnk/instructions/<subtree>/AGENTS.md with its
|
|
97
97
|
// path preserved. No foisted READ and no teaching (operator-ruled):
|
package/dist/server/loopDocs.sql
CHANGED
|
@@ -4,9 +4,11 @@
|
|
|
4
4
|
-- {§functionality-documents}).
|
|
5
5
|
|
|
6
6
|
-- PREP: loop_docs_materialized
|
|
7
|
-
|
|
7
|
+
-- An outer join cannot flatten the entry_channels view, so this one reads its tables ({§content-store}).
|
|
8
|
+
SELECT e.pathname, COALESCE(ec.buffer, b.content) AS content
|
|
8
9
|
FROM entries e
|
|
9
|
-
LEFT JOIN
|
|
10
|
+
LEFT JOIN entry_channel_rows ec ON ec.entry_id = e.id AND ec.name = 'body'
|
|
11
|
+
LEFT JOIN contents b ON b.id = ec.content_id
|
|
10
12
|
WHERE e.workspace_id = $workspace_id
|
|
11
13
|
AND e.scheme = 'worker'
|
|
12
14
|
AND e.authority = ''
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-catalog.d.ts","sourceRoot":"","sources":["../../src/server/model-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EAEzB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"model-catalog.d.ts","sourceRoot":"","sources":["../../src/server/model-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EAEzB,MAAM,0BAA0B,CAAC;AAsBlC,eAAO,MAAM,gBAAgB,UAClB,iBAAiB,QACnB,MAAM,CAAC,UAAU,KACvB,gBAmEF,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Validator, } from "@plurnk/plurnk-contracts";
|
|
2
2
|
import { catalogSnapshot, providerCatalogSnapshot, providerNameFromCatalogId, } from "@plurnk/plurnk-models";
|
|
3
3
|
import { catalogReasoningPolicies, providerReadiness } from "@plurnk/plurnk-providers";
|
|
4
|
-
|
|
4
|
+
import Knob from "../core/Knob.js";
|
|
5
5
|
const compareText = (left, right) => left < right ? -1 : left > right ? 1 : 0;
|
|
6
6
|
const entryMatches = (entry, search) => [
|
|
7
7
|
entry.selector,
|
|
@@ -19,7 +19,7 @@ export const listModelCatalog = (input, env = process.env) => {
|
|
|
19
19
|
const search = query.search?.trim().toLowerCase() ?? "";
|
|
20
20
|
const availability = query.availability ?? "configured";
|
|
21
21
|
const offset = query.offset ?? 0;
|
|
22
|
-
const limit = query.limit ??
|
|
22
|
+
const limit = query.limit ?? Knob.integer("PLURNK_SERVICE_MODEL_CATALOG_PAGE", 1);
|
|
23
23
|
const providers = providerCatalogSnapshot();
|
|
24
24
|
const readinessByProvider = new Map();
|
|
25
25
|
const entries = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-catalog.js","sourceRoot":"","sources":["../../src/server/model-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,SAAS,GAKZ,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACH,eAAe,EACf,uBAAuB,EACvB,yBAAyB,GAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"model-catalog.js","sourceRoot":"","sources":["../../src/server/model-catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
SELECT id, worker_id AS workerId, sequence, status, prompt,
|
|
6
6
|
prompt_source AS promptSource, terminated_at AS terminatedAt,
|
|
7
7
|
terminal_result AS terminalResult,
|
|
8
|
-
scheduled_at, repeat_interval_ms, recurrence_root_loop_id,
|
|
9
8
|
(SELECT COUNT(*)
|
|
10
9
|
FROM turns
|
|
11
10
|
WHERE turns.loop_id = loops.id
|
|
@@ -17,3 +17,48 @@ ON CONFLICT (workspace_id, namespace_owner) DO UPDATE SET
|
|
|
17
17
|
DELETE FROM workspace_module_state
|
|
18
18
|
WHERE workspace_id = $workspace_id
|
|
19
19
|
AND namespace_owner = $namespace_owner;
|
|
20
|
+
|
|
21
|
+
-- Worker-scoped module state ({§module-workspace-state}). Same snapshot, different owner: a
|
|
22
|
+
-- family declares its scope and the coordinator keys state by it, so origin, enabledness and the
|
|
23
|
+
-- service-baseline rules stay one implementation across every family.
|
|
24
|
+
|
|
25
|
+
-- PREP: worker_module_state_get
|
|
26
|
+
SELECT state
|
|
27
|
+
FROM worker_module_state
|
|
28
|
+
WHERE worker_id = $worker_id
|
|
29
|
+
AND namespace_owner = $namespace_owner;
|
|
30
|
+
|
|
31
|
+
-- PREP: worker_module_state_put
|
|
32
|
+
INSERT INTO worker_module_state (worker_id, namespace_owner, state)
|
|
33
|
+
VALUES ($worker_id, $namespace_owner, $state)
|
|
34
|
+
ON CONFLICT (worker_id, namespace_owner) DO UPDATE SET
|
|
35
|
+
state = excluded.state,
|
|
36
|
+
updated_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now');
|
|
37
|
+
|
|
38
|
+
-- PREP: worker_module_state_delete
|
|
39
|
+
DELETE FROM worker_module_state
|
|
40
|
+
WHERE worker_id = $worker_id
|
|
41
|
+
AND namespace_owner = $namespace_owner;
|
|
42
|
+
|
|
43
|
+
-- INIT: workers_inherit_module_state
|
|
44
|
+
-- {§functionality-scope} — a Worker created with a parent (WORK and FORK alike) starts with a copy
|
|
45
|
+
-- of the parent's worker-scoped state, taken at creation: the child owns its copy, and neither
|
|
46
|
+
-- side's later edits reach the other. Each copied entry names its source Worker (`inherited`),
|
|
47
|
+
-- preserved across generations, so `list` renders provenance rather than claiming the child set it.
|
|
48
|
+
DROP TRIGGER IF EXISTS workers_inherit_module_state;
|
|
49
|
+
CREATE TRIGGER workers_inherit_module_state
|
|
50
|
+
AFTER INSERT ON workers
|
|
51
|
+
WHEN NEW.parent_worker_id IS NOT NULL
|
|
52
|
+
BEGIN
|
|
53
|
+
INSERT INTO worker_module_state (worker_id, namespace_owner, state)
|
|
54
|
+
SELECT NEW.id, s.namespace_owner,
|
|
55
|
+
json_set(s.state, '$.definitions', coalesce(
|
|
56
|
+
(SELECT json_group_object(key,
|
|
57
|
+
CASE WHEN json_extract(value, '$.inherited') IS NULL
|
|
58
|
+
THEN json_set(value, '$.inherited', (SELECT name FROM workers WHERE id = NEW.parent_worker_id))
|
|
59
|
+
ELSE json(value) END)
|
|
60
|
+
FROM json_each(s.state, '$.definitions')),
|
|
61
|
+
json('{}')))
|
|
62
|
+
FROM worker_module_state s
|
|
63
|
+
WHERE s.worker_id = NEW.parent_worker_id;
|
|
64
|
+
END;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
-- {§module-workspace-directory} — one atomic allocation; opening a second module
|
|
2
|
+
-- or racing the first lookup cannot replace the workspace's existing identity.
|
|
3
|
+
-- PREP: workspace_storage_key
|
|
4
|
+
INSERT INTO workspace_module_state (workspace_id, namespace_owner, state)
|
|
5
|
+
SELECT id, '@plurnk/plurnk-service/storage', json_object('key', lower(hex(randomblob(16))))
|
|
6
|
+
FROM workspaces WHERE id = $workspace_id
|
|
7
|
+
ON CONFLICT (workspace_id, namespace_owner) DO UPDATE SET state = workspace_module_state.state
|
|
8
|
+
RETURNING state;
|
package/dist/service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":";AAoCA,MAAM,CAAC,OAAO,OAAO,OAAO;;IAsUxB,OAAa,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA8GjC;CACJ"}
|
package/dist/service.js
CHANGED
|
@@ -6,6 +6,7 @@ import { fileURLToPath } from "node:url";
|
|
|
6
6
|
import { dirname, resolve } from "node:path";
|
|
7
7
|
import SqlRite from "@possumtech/sqlrite";
|
|
8
8
|
import Daemon from "./server/Daemon.js";
|
|
9
|
+
import HttpListener from "./server/HttpListener.js";
|
|
9
10
|
import DaemonLock from "./server/DaemonLock.js";
|
|
10
11
|
import EnvFlags from "./core/EnvFlags.js";
|
|
11
12
|
import EnvDefaults from "./core/env-defaults.js";
|
|
@@ -138,6 +139,14 @@ export default class Service {
|
|
|
138
139
|
if (v !== undefined)
|
|
139
140
|
tuning[opt] = v;
|
|
140
141
|
}
|
|
142
|
+
// sqlrite's own contract for the pool size; -1 is refused here, never read as "match cores".
|
|
143
|
+
const readers = Service.#sqliteKnob("PLURNK_SERVICE_SQLITE_READERS");
|
|
144
|
+
if (readers !== undefined) {
|
|
145
|
+
if (!Number.isSafeInteger(readers) || readers < 0) {
|
|
146
|
+
Service.#die(78, `PLURNK_SERVICE_SQLITE_READERS must be a non-negative integer (read-only database Workers beside the writer), got ${readers}`);
|
|
147
|
+
}
|
|
148
|
+
tuning.readers = readers;
|
|
149
|
+
}
|
|
141
150
|
mkdirSync(dirname(dbPath), { recursive: true, mode: 0o700 });
|
|
142
151
|
const lock = exclusive ? await DaemonLock.acquire(dbPath) : null;
|
|
143
152
|
try {
|
|
@@ -173,7 +182,14 @@ export default class Service {
|
|
|
173
182
|
const hint = sidecars.length > 0
|
|
174
183
|
? ` — stale sidecar(s) present (${sidecars.join(", ")}): a prior daemon may still hold the old database; stop it and delete the sidecars`
|
|
175
184
|
: "";
|
|
176
|
-
|
|
185
|
+
// A missing column or table on an existing database is the pre-migration phase at work
|
|
186
|
+
// ({§db-schema-baseline}): a chapter changed under it, and the remedy is deletion. Say
|
|
187
|
+
// so; the bare cause reads like a bug.
|
|
188
|
+
const diagnosis = cause instanceof Error ? cause.message : String(cause);
|
|
189
|
+
const baseline = /^no such (?:column|table)\b/.test(diagnosis)
|
|
190
|
+
? ` — the database predates the current schema baseline: stop every daemon that holds it, delete ${dbPath} with its -wal and -shm sidecars, then start again`
|
|
191
|
+
: "";
|
|
192
|
+
throw new Error(`open ${dbPath} failed${hint}${baseline}`, { cause });
|
|
177
193
|
}
|
|
178
194
|
}
|
|
179
195
|
static async #migrate() {
|
|
@@ -186,6 +202,7 @@ export default class Service {
|
|
|
186
202
|
await db.close();
|
|
187
203
|
}
|
|
188
204
|
}
|
|
205
|
+
// {§startup-admission} — listener, database, provider, daemon, in that order; a failure unwinds what it holds.
|
|
189
206
|
static async #start() {
|
|
190
207
|
FileCreationPolicy.serviceScope();
|
|
191
208
|
const dbPath = Service.#databasePath();
|
|
@@ -196,14 +213,15 @@ export default class Service {
|
|
|
196
213
|
// {§operator-config} — an explicit boot selector must resolve; only an
|
|
197
214
|
// unset selector permits modelless boot for per-request selection.
|
|
198
215
|
const { active: route } = Service.#modelConfiguration();
|
|
199
|
-
// {§startup-listener-admission}: the
|
|
200
|
-
//
|
|
201
|
-
// the
|
|
202
|
-
const
|
|
216
|
+
// {§startup-listener-admission}: the daemon's one listener wins the configured
|
|
217
|
+
// address before anything may mutate durable state ({§http-host}). It answers 503
|
|
218
|
+
// until the client-interface module mounts the root at daemon activation.
|
|
219
|
+
const listener = await HttpListener.bind({ host, port });
|
|
220
|
+
const aguiModule = AguiModule.create({ host, port });
|
|
203
221
|
let db = null;
|
|
204
222
|
let daemon = null;
|
|
205
223
|
let observability = null;
|
|
206
|
-
const teardown = new ServiceTeardown(async () => { await daemon?.stop(); }, async () => { await observability?.shutdown(); }, async () => { await db?.close(); }, async () => { await
|
|
224
|
+
const teardown = new ServiceTeardown(async () => { await daemon?.stop(); }, async () => { await observability?.shutdown(); }, async () => { await db?.close(); }, async () => { await listener.close(); });
|
|
207
225
|
try {
|
|
208
226
|
// {§startup-admission-order}: after listener ownership, persistence
|
|
209
227
|
// and its exclusive owner are admitted before provider verification
|
|
@@ -214,17 +232,17 @@ export default class Service {
|
|
|
214
232
|
observability = await startObservability();
|
|
215
233
|
const hooksModule = HooksModule.init();
|
|
216
234
|
const provider = route === null ? null : await ProviderInstantiate.loadActiveProvider();
|
|
217
|
-
daemon = new Daemon({ db, provider, nodeModulesPath: Service.#pluginsNodeModules(),
|
|
235
|
+
daemon = new Daemon({ db, provider, nodeModulesPath: Service.#pluginsNodeModules(), hostPaths: Service.#hostPaths, http: listener });
|
|
218
236
|
ServiceModules.registerWorkspaceCapabilities(daemon);
|
|
219
237
|
daemon.registerModule(hooksModule);
|
|
220
238
|
const a2a = hostedAgentConfiguration();
|
|
221
239
|
if (a2a !== null)
|
|
222
240
|
daemon.registerModule(A2aModule.init(a2a));
|
|
223
|
-
// {§rpc}: AG-UI
|
|
224
|
-
//
|
|
241
|
+
// {§rpc}: AG-UI mounts the root of the daemon's listener at activation; the
|
|
242
|
+
// socket never closes or rebinds between admission and readiness.
|
|
225
243
|
daemon.registerModule(aguiModule);
|
|
226
244
|
await daemon.start();
|
|
227
|
-
const aguiAddr =
|
|
245
|
+
const aguiAddr = listener.httpAddress();
|
|
228
246
|
if (route === null) {
|
|
229
247
|
process.stderr.write(`plurnk-service: no model configured — choose a profile in ${Service.#hostPaths.configFile}; `
|
|
230
248
|
+ "run plurnk-service config defaults for every installed option. Loops fail legibly until then.\n");
|
|
@@ -328,7 +346,15 @@ export default class Service {
|
|
|
328
346
|
// `config defaults`; there is no generated configuration copy.
|
|
329
347
|
const defaultsFiles = await EnvDefaults.collect(Service.#projectRoot, Service.#pluginsNodeModules());
|
|
330
348
|
EnvDefaults.apply(EnvDefaults.merge(defaultsFiles));
|
|
331
|
-
|
|
349
|
+
// A flag is a knob's spelling for one invocation: the service's own panel, and the keys it
|
|
350
|
+
// shares with every client ({§operator-config-shared-keys}), which contracts declares.
|
|
351
|
+
const shared = defaultsFiles.find(({ owner }) => owner === "@plurnk/plurnk-contracts");
|
|
352
|
+
if (shared === undefined)
|
|
353
|
+
throw new Error("@plurnk/plurnk-contracts: .env.defaults missing — the shared endpoint keys have no owner");
|
|
354
|
+
const flagDescriptors = [
|
|
355
|
+
...await EnvFlags.parseEnvDefaults(resolve(Service.#projectRoot, ".env.defaults")),
|
|
356
|
+
...EnvFlags.parseEnvDefaultsContent(shared.text),
|
|
357
|
+
];
|
|
332
358
|
const flagOptions = {};
|
|
333
359
|
for (const f of flagDescriptors) {
|
|
334
360
|
flagOptions[f.flagName.replace(/^--/, "")] = { type: "string" };
|