@plurnk/plurnk-service 1.18.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 +76 -13
- package/README.md +5 -3
- package/SPEC.md +924 -689
- 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 +79 -37
- package/dist/content/read-projector.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 -1
- package/dist/core/AdmittedTurnExecutor.d.ts.map +1 -1
- package/dist/core/AdmittedTurnExecutor.js +19 -19
- 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 +6 -3
- package/dist/core/CapabilityResolver.js.map +1 -1
- package/dist/core/ChannelWrite.d.ts +3 -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.js +6 -6
- package/dist/core/DataStatementRunner.js.map +1 -1
- package/dist/core/Dispatcher.d.ts +12 -4
- package/dist/core/Dispatcher.d.ts.map +1 -1
- package/dist/core/Dispatcher.js +112 -90
- 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/ExecutorRegistry.d.ts.map +1 -1
- package/dist/core/ExecutorRegistry.js +2 -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 +6 -35
- package/dist/core/LogBody.js.map +1 -1
- package/dist/core/LogEntryProjection.d.ts.map +1 -1
- package/dist/core/LogEntryProjection.js +4 -0
- 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.js +2 -2
- 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 +23 -29
- 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/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 +85 -22
- 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/SchemeRegistry.d.ts +2 -0
- package/dist/core/SchemeRegistry.d.ts.map +1 -1
- package/dist/core/SchemeRegistry.js +11 -5
- 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.map +1 -1
- package/dist/core/StrikeRail.js +9 -3
- 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 +45 -23
- 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 -21
- package/dist/core/TurnDispositionHandler.d.ts.map +1 -1
- package/dist/core/TurnDispositionHandler.js +32 -190
- 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 +63 -41
- package/dist/core/TurnMaterialization.js.map +1 -1
- package/dist/core/TurnMaterialization.sql +23 -6
- package/dist/core/TurnOps.js +1 -1
- package/dist/core/TurnRunner.d.ts +1 -3
- package/dist/core/TurnRunner.d.ts.map +1 -1
- package/dist/core/TurnRunner.js +148 -189
- 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/WorkerName.d.ts +1 -1
- package/dist/core/WorkerName.d.ts.map +1 -1
- package/dist/core/WorkerName.js +3 -3
- package/dist/core/WorkerName.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/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 +37 -20
- package/dist/core/git-state.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 +112 -88
- 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 +35 -30
- package/dist/digest/Digest.js.map +1 -1
- package/dist/digest/DigestRender.d.ts +1 -0
- package/dist/digest/DigestRender.d.ts.map +1 -1
- package/dist/digest/DigestRender.js +53 -1
- 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 +15 -0
- package/dist/digest/digest-rows.d.ts.map +1 -1
- package/dist/digest/digest.sql +13 -3
- 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 +74 -62
- 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/File.d.ts.map +1 -1
- package/dist/schemes/File.js +28 -20
- 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 +29 -9
- package/dist/schemes/Log.js.map +1 -1
- package/dist/schemes/QuestionTool.d.ts.map +1 -1
- package/dist/schemes/QuestionTool.js +14 -1
- 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 +80 -35
- 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 +19 -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 +5 -3
- package/dist/schemes/_entry-manifest.js.map +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.js +4 -4
- package/dist/schemes/_search-index.js.map +1 -1
- package/dist/schemes/exec-abort.d.ts.map +1 -1
- package/dist/schemes/exec-abort.js +4 -3
- package/dist/schemes/exec-abort.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/server/ClientReads.d.ts.map +1 -1
- package/dist/server/ClientReads.js +3 -1
- package/dist/server/ClientReads.js.map +1 -1
- package/dist/server/Daemon.d.ts +30 -7
- package/dist/server/Daemon.d.ts.map +1 -1
- package/dist/server/Daemon.js +107 -48
- package/dist/server/Daemon.js.map +1 -1
- package/dist/server/DaemonModule.d.ts +19 -5
- 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 +12 -3
- package/dist/server/EnvFunctionality.d.ts.map +1 -1
- package/dist/server/EnvFunctionality.js +19 -14
- package/dist/server/EnvFunctionality.js.map +1 -1
- package/dist/server/Functionality.d.ts +2 -2
- package/dist/server/Functionality.d.ts.map +1 -1
- package/dist/server/Functionality.js +97 -62
- package/dist/server/Functionality.js.map +1 -1
- package/dist/server/FunctionalityManager.d.ts +3 -1
- package/dist/server/FunctionalityManager.d.ts.map +1 -1
- package/dist/server/FunctionalityManager.js +11 -5
- 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 -16
- 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 +11 -0
- package/dist/server/Retention.d.ts.map +1 -1
- package/dist/server/Retention.js +47 -2
- package/dist/server/Retention.js.map +1 -1
- package/dist/server/Retention.sql +32 -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 +22 -15
- 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/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 +24 -26
- 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 -2
- package/dist/server/envelope.d.ts.map +1 -1
- package/dist/server/envelope.js +7 -9
- 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 +8 -35
- 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-storage.sql +8 -0
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +21 -10
- package/dist/service.js.map +1 -1
- package/docs/copy-move.md +31 -0
- package/docs/env.md +19 -7
- package/docs/skills.md +2 -2
- package/migrations/002_workers.sql +26 -17
- package/migrations/003_loops.sql +82 -28
- package/migrations/005_entries.sql +135 -22
- package/migrations/006_log.sql +77 -25
- package/migrations/007_subscriptions.sql +10 -15
- package/package.json +35 -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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoopLifecycle.js","sourceRoot":"","sources":["../../src/core/LoopLifecycle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LoopLifecycle.js","sourceRoot":"","sources":["../../src/core/LoopLifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,48 +15,40 @@ UPDATE loops
|
|
|
15
15
|
SET status = 202,
|
|
16
16
|
execution_elapsed_ms = COALESCE($elapsed_ms, execution_elapsed_ms),
|
|
17
17
|
wait_revision = wait_revision + 1,
|
|
18
|
-
|
|
19
|
-
wait_poll_interval = $poll_interval,
|
|
20
|
-
wait_poll_at = $poll_at
|
|
18
|
+
wait_poll_at = NULL
|
|
21
19
|
WHERE id = $loop_id AND status = 102
|
|
22
20
|
RETURNING id;
|
|
23
21
|
|
|
24
22
|
-- PREP: lifecycle_wake_loop
|
|
25
23
|
UPDATE loops
|
|
26
24
|
SET status = 100,
|
|
27
|
-
wait_deadline_at = NULL,
|
|
28
|
-
wait_poll_interval = NULL,
|
|
29
25
|
wait_poll_at = NULL
|
|
30
26
|
WHERE id = $loop_id AND status = 202
|
|
31
27
|
AND ($revision IS NULL OR wait_revision = $revision)
|
|
32
|
-
AND ($due_at IS NULL OR
|
|
28
|
+
AND ($due_at IS NULL OR wait_poll_at <= $due_at)
|
|
33
29
|
AND ($event_only = 0 OR observed_wake_revision < (SELECT wake_revision FROM workers WHERE id = loops.worker_id))
|
|
34
30
|
RETURNING id;
|
|
35
31
|
|
|
36
32
|
-- PREP: lifecycle_parked_loops
|
|
37
|
-
SELECT id, wait_revision,
|
|
33
|
+
SELECT id, wait_revision, wait_poll_at
|
|
38
34
|
FROM loops WHERE worker_id = $worker_id AND status = 202
|
|
39
35
|
ORDER BY sequence;
|
|
40
36
|
|
|
41
37
|
-- PREP: lifecycle_set_inherited_poll
|
|
42
38
|
UPDATE loops SET wait_poll_at = $poll_at
|
|
43
39
|
WHERE id = $loop_id AND status = 202 AND wait_revision = $revision
|
|
44
|
-
AND
|
|
40
|
+
AND wait_poll_at IS NULL;
|
|
45
41
|
|
|
46
42
|
-- PREP: lifecycle_finish_loop
|
|
47
43
|
UPDATE loops
|
|
48
44
|
SET status = $status,
|
|
49
45
|
execution_elapsed_ms = COALESCE($elapsed_ms, execution_elapsed_ms),
|
|
50
|
-
wait_deadline_at = NULL,
|
|
51
|
-
wait_poll_interval = NULL,
|
|
52
46
|
wait_poll_at = NULL,
|
|
53
|
-
terminal_result =
|
|
54
|
-
THEN json_set($result,
|
|
55
|
-
'$.content', (SELECT content FROM loop_responses WHERE loop_id = loops.id),
|
|
56
|
-
'$.mimetype', 'text/markdown')
|
|
57
|
-
ELSE $result END,
|
|
47
|
+
terminal_result = $result,
|
|
58
48
|
terminated_by = $terminated_by
|
|
59
49
|
WHERE id = $loop_id AND status IN (100, 102, 202)
|
|
50
|
+
AND ($require_answered = 0 OR NOT EXISTS (SELECT 1 FROM unanswered_messages WHERE loop_id = loops.id))
|
|
51
|
+
AND ($require_answered = 0 OR observed_wake_revision = (SELECT wake_revision FROM workers WHERE id = loops.worker_id))
|
|
60
52
|
RETURNING terminal_result;
|
|
61
53
|
|
|
62
54
|
-- PREP: lifecycle_loop_status
|
|
@@ -117,34 +109,30 @@ WHERE loops.sequence > json_extract(cutoff.value, '$.cancelled_through_sequence'
|
|
|
117
109
|
AND loops.status = 499 AND loops.terminated_by = 'cancel'
|
|
118
110
|
ORDER BY loops.id;
|
|
119
111
|
|
|
120
|
-
-- INIT:
|
|
121
|
-
-- {§
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
112
|
+
-- INIT: loops_stamp_claimed_at_insert
|
|
113
|
+
-- {§loop-claim-latency}: a loop inserted running is claimed at its insertion; the first claim stays.
|
|
114
|
+
DROP TRIGGER IF EXISTS loops_stamp_claimed_at_insert;
|
|
115
|
+
CREATE TRIGGER loops_stamp_claimed_at_insert
|
|
116
|
+
AFTER INSERT ON loops
|
|
117
|
+
WHEN NEW.status = 102 AND NEW.claimed_at IS NULL
|
|
118
|
+
BEGIN
|
|
119
|
+
UPDATE loops SET claimed_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now') WHERE id = NEW.id;
|
|
120
|
+
END;
|
|
121
|
+
|
|
122
|
+
-- INIT: loops_stamp_claimed_at_update
|
|
123
|
+
-- {§loop-claim-latency}: a queued loop is claimed when it first moves to 102.
|
|
124
|
+
DROP TRIGGER IF EXISTS loops_stamp_claimed_at_update;
|
|
125
|
+
CREATE TRIGGER loops_stamp_claimed_at_update
|
|
125
126
|
AFTER UPDATE OF status ON loops
|
|
126
|
-
WHEN NEW.status =
|
|
127
|
-
AND NEW.repeat_interval_ms IS NOT NULL
|
|
127
|
+
WHEN NEW.status = 102 AND OLD.status <> 102 AND NEW.claimed_at IS NULL
|
|
128
128
|
BEGIN
|
|
129
|
-
|
|
130
|
-
worker_id, sequence, status, prompt, prompt_source, policy,
|
|
131
|
-
model_route_id, spawn_model_route_id, reasoning_policy, max_turns,
|
|
132
|
-
execution_budget_ms, open_paths, scheduled_at, repeat_interval_ms, recurrence_root_loop_id
|
|
133
|
-
)
|
|
134
|
-
SELECT NEW.worker_id,
|
|
135
|
-
(SELECT COALESCE(MAX(sequence), 0) + 1 FROM loops WHERE worker_id = NEW.worker_id),
|
|
136
|
-
100, seed.prompt, seed.prompt_source, seed.policy,
|
|
137
|
-
seed.model_route_id, seed.spawn_model_route_id, seed.reasoning_policy, seed.max_turns,
|
|
138
|
-
seed.execution_budget_ms, seed.open_paths,
|
|
139
|
-
NEW.scheduled_at + NEW.repeat_interval_ms, NEW.repeat_interval_ms, seed.id
|
|
140
|
-
FROM loops seed
|
|
141
|
-
WHERE seed.id = COALESCE(NEW.recurrence_root_loop_id, NEW.id);
|
|
129
|
+
UPDATE loops SET claimed_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now') WHERE id = NEW.id;
|
|
142
130
|
END;
|
|
143
131
|
|
|
144
132
|
-- INIT: loops_stamp_terminated_at
|
|
145
133
|
-- {§worker-scheme}: a loop crossing into a terminal status stamps terminated_at, so sibling
|
|
146
|
-
-- workers
|
|
147
|
-
--
|
|
134
|
+
-- workers observe the terminal outcome uniformly across every conclusion path.
|
|
135
|
+
-- The stamp updates terminated_at,
|
|
148
136
|
-- never status, so it cannot re-fire this trigger. Terminals: 200 done · 413 budget ·
|
|
149
137
|
-- 429 turn-ceiling · 499 cancel · 500 fail · 504 execution timeout · 508 runaway. (202 = parked/sleeping, NOT terminal.)
|
|
150
138
|
DROP TRIGGER IF EXISTS loops_stamp_terminated_at;
|
|
@@ -157,7 +145,7 @@ END;
|
|
|
157
145
|
|
|
158
146
|
-- INIT: workers_cancel_live_loops
|
|
159
147
|
-- {§worker-cancel-trigger}: writing a worker's cancellation retires its live loops in the same
|
|
160
|
-
-- statement — 499, waits cleared, the
|
|
148
|
+
-- statement — 499, waits cleared, the
|
|
161
149
|
-- Problem instanced per loop. Loops already terminal keep their own outcome.
|
|
162
150
|
DROP TRIGGER IF EXISTS workers_cancel_live_loops;
|
|
163
151
|
CREATE TRIGGER workers_cancel_live_loops
|
|
@@ -166,17 +154,11 @@ WHEN NEW.cancellation IS NOT NULL
|
|
|
166
154
|
BEGIN
|
|
167
155
|
UPDATE loops
|
|
168
156
|
SET status = 499,
|
|
169
|
-
wait_deadline_at = NULL,
|
|
170
|
-
wait_poll_interval = NULL,
|
|
171
157
|
wait_poll_at = NULL,
|
|
172
158
|
terminal_result = json_set(
|
|
173
|
-
|
|
174
|
-
THEN json_set(NEW.cancellation,
|
|
175
|
-
'$.content', (SELECT content FROM loop_responses WHERE loop_id = loops.id),
|
|
176
|
-
'$.mimetype', 'text/markdown')
|
|
177
|
-
ELSE NEW.cancellation END,
|
|
159
|
+
NEW.cancellation,
|
|
178
160
|
'$.problem.instance',
|
|
179
|
-
'
|
|
161
|
+
'ops://' || NEW.name || '/' || sequence
|
|
180
162
|
),
|
|
181
163
|
terminated_by = 'cancel'
|
|
182
164
|
WHERE worker_id = NEW.id
|
|
@@ -184,7 +166,12 @@ BEGIN
|
|
|
184
166
|
END;
|
|
185
167
|
|
|
186
168
|
-- PREP: engine_loop_sequence
|
|
187
|
-
-- The loop's per-worker sequence — the model-facing coordinate (prompt/<worker>/<loop-seq>/<turn-seq>,
|
|
188
|
-
-- matching the log's loop-relative numbering). The raw db id leaked into prompt paths and the
|
|
189
|
-
-- model's first loop read as prompt/2/1 (the docs loop holds id 1). Owner: minor but annoying.
|
|
190
169
|
SELECT sequence FROM loops WHERE id = $loop_id;
|
|
170
|
+
|
|
171
|
+
-- PREP: loop_resource_identity
|
|
172
|
+
SELECT 'ops://' || w.name || '/' || l.sequence AS resource
|
|
173
|
+
FROM loops l JOIN workers w ON w.id = l.worker_id WHERE l.id = $loop_id;
|
|
174
|
+
|
|
175
|
+
-- PREP: loop_live_obligations
|
|
176
|
+
-- {§worker-obligations}: the live work a loop is held on — its worker's open streams and live children.
|
|
177
|
+
SELECT streams, workers FROM loop_obligations WHERE loop_id = $loop_id;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Db } from "./Db.ts";
|
|
2
|
+
import type { SchemeResult } from "@plurnk/plurnk-schemes";
|
|
3
|
+
export interface LoopOutcome {
|
|
4
|
+
readonly resource: string;
|
|
5
|
+
readonly result: SchemeResult;
|
|
6
|
+
readonly terminatedBy: string | null;
|
|
7
|
+
}
|
|
8
|
+
export declare const loopAddress: (worker: string, sequence: number) => string;
|
|
9
|
+
export declare const loopOutcome: (db: Db, workspaceId: number, worker: string, sequence: number) => Promise<LoopOutcome | null>;
|
|
10
|
+
//# sourceMappingURL=LoopOutcome.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoopOutcome.d.ts","sourceRoot":"","sources":["../../src/core/LoopOutcome.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAI3D,MAAM,WAAW,WAAW;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC;AAED,eAAO,MAAM,WAAW,WAAY,MAAM,YAAY,MAAM,KAAG,MAAuC,CAAC;AAGvG,eAAO,MAAM,WAAW,OAChB,EAAE,eACO,MAAM,UACX,MAAM,YACJ,MAAM,KACjB,OAAO,CAAC,WAAW,GAAG,IAAI,CAuB5B,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import Results from "./results.js";
|
|
2
|
+
import TerminalResult from "./TerminalResult.js";
|
|
3
|
+
export const loopAddress = (worker, sequence) => `ops://${worker}/${sequence}`;
|
|
4
|
+
// `null` means no such loop; every other state is a result the caller can publish.
|
|
5
|
+
export const loopOutcome = async (db, workspaceId, worker, sequence) => {
|
|
6
|
+
const row = await db.turn_source_loop_answer.get({ workspace_id: workspaceId, worker_name: worker, loop_seq: sequence });
|
|
7
|
+
if (row === undefined)
|
|
8
|
+
return null;
|
|
9
|
+
const resource = loopAddress(worker, sequence);
|
|
10
|
+
const terminal = row.terminal_result === null ? null : TerminalResult.parse(row.terminal_result, resource);
|
|
11
|
+
// A loop that ended badly reports how it ended, even when it answered earlier: the failure is
|
|
12
|
+
// the news. Otherwise its answer is what it said.
|
|
13
|
+
if (terminal !== null && Results.isErrorStatus(terminal.status)) {
|
|
14
|
+
return { resource, result: terminal, terminatedBy: row.terminated_by };
|
|
15
|
+
}
|
|
16
|
+
if (row.answer !== null) {
|
|
17
|
+
return { resource, result: Results.assert({ status: 200, content: row.answer, mimetype: "text/markdown" }), terminatedBy: row.terminated_by };
|
|
18
|
+
}
|
|
19
|
+
if (terminal === null) {
|
|
20
|
+
return {
|
|
21
|
+
resource,
|
|
22
|
+
result: Results.failure("scheme:ops", "loop-running", 425, `The execution at ${resource} has not concluded.`, { resource }, { retryable: true }),
|
|
23
|
+
terminatedBy: row.terminated_by,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
return { resource, result: terminal, terminatedBy: row.terminated_by };
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=LoopOutcome.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoopOutcome.js","sourceRoot":"","sources":["../../src/core/LoopOutcome.ts"],"names":[],"mappings":"AAOA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,cAAc,MAAM,qBAAqB,CAAC;AAQjD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAc,EAAE,QAAgB,EAAU,EAAE,CAAC,SAAS,MAAM,IAAI,QAAQ,EAAE,CAAC;AAEvG,mFAAmF;AACnF,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAC5B,EAAM,EACN,WAAmB,EACnB,MAAc,EACd,QAAgB,EACW,EAAE;IAC7B,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,uBAAuB,CAAC,GAAG,CAE7C,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC3E,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,GAAG,CAAC,eAAe,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;IAC3G,8FAA8F;IAC9F,kDAAkD;IAClD,IAAI,QAAQ,KAAK,IAAI,IAAI,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3E,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,aAAa,EAAE,CAAC;IAClJ,CAAC;IACD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO;YACH,QAAQ;YACR,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,cAAc,EAAE,GAAG,EAAE,oBAAoB,QAAQ,qBAAqB,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YAChJ,YAAY,EAAE,GAAG,CAAC,aAAa;SAClC,CAAC;IACN,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,CAAC,aAAa,EAAE,CAAC;AAC3E,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type LoopPolicy, type LoopPolicyRequest } from "@plurnk/plurnk-contracts";
|
|
2
|
+
export default class LoopPolicies {
|
|
3
|
+
#private;
|
|
4
|
+
static compose(stated: LoopPolicyRequest): LoopPolicy;
|
|
5
|
+
static validateConfiguration(): void;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=LoopPolicies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoopPolicies.d.ts","sourceRoot":"","sources":["../../src/core/LoopPolicies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,KAAK,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAOjH,MAAM,CAAC,OAAO,OAAO,YAAY;;IAI7B,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,iBAAiB,GAAG,UAAU,CAoBpD;IAGD,MAAM,CAAC,qBAAqB,IAAI,IAAI,CAInC;CAOJ"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { PROPOSAL_POLICIES, Validator } from "@plurnk/plurnk-contracts";
|
|
2
|
+
import Knob from "./Knob.js";
|
|
3
|
+
import Results, { OperationFailureError } from "./results.js";
|
|
4
|
+
// {§loop-policy-composition} — a loop's policy is what its creator stated over what the panel
|
|
5
|
+
// says, composed once, where the loop is persisted. Every panel state is lawful: attendance picks
|
|
6
|
+
// which disposition knob answers, so only a creator's own statement can contradict itself.
|
|
7
|
+
export default class LoopPolicies {
|
|
8
|
+
// Nobody is present to review in an unattended loop, so review is not a choice there.
|
|
9
|
+
static #UNATTENDED = PROPOSAL_POLICIES.filter((policy) => policy !== "review");
|
|
10
|
+
static compose(stated) {
|
|
11
|
+
const attended = stated.attended ?? Knob.flag("PLURNK_SERVICE_ATTENDED");
|
|
12
|
+
const policy = {
|
|
13
|
+
proposals: stated.proposals ?? LoopPolicies.#proposals(attended),
|
|
14
|
+
attended,
|
|
15
|
+
};
|
|
16
|
+
if (Validator.validateLoopPolicy(policy).valid)
|
|
17
|
+
return policy;
|
|
18
|
+
throw new OperationFailureError(Results.failure("daemon:input", "loop-policy-invalid", 400, "An unattended loop cannot hold a proposal for review: nobody is present to answer.", {}, {
|
|
19
|
+
field: "policy",
|
|
20
|
+
stage: "loop-policy-composition",
|
|
21
|
+
recovery: "State proposals accept or reject, or attend the loop.",
|
|
22
|
+
retryable: false,
|
|
23
|
+
}));
|
|
24
|
+
}
|
|
25
|
+
// An invalid panel fails boot by the knob's name, not the first loop.
|
|
26
|
+
static validateConfiguration() {
|
|
27
|
+
Knob.flag("PLURNK_SERVICE_ATTENDED");
|
|
28
|
+
LoopPolicies.#proposals(true);
|
|
29
|
+
LoopPolicies.#proposals(false);
|
|
30
|
+
}
|
|
31
|
+
static #proposals(attended) {
|
|
32
|
+
return attended
|
|
33
|
+
? Knob.choice("PLURNK_SERVICE_PROPOSALS", PROPOSAL_POLICIES)
|
|
34
|
+
: Knob.choice("PLURNK_SERVICE_UNATTENDED_PROPOSALS", LoopPolicies.#UNATTENDED);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=LoopPolicies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoopPolicies.js","sourceRoot":"","sources":["../../src/core/LoopPolicies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAA2C,MAAM,0BAA0B,CAAC;AACjH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,OAAO,EAAE,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAE9D,8FAA8F;AAC9F,kGAAkG;AAClG,2FAA2F;AAC3F,MAAM,CAAC,OAAO,OAAO,YAAY;IAC7B,sFAAsF;IACtF,MAAM,CAAU,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;IAExF,MAAM,CAAC,OAAO,CAAC,MAAyB;QACpC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG;YACX,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC;YAChE,QAAQ;SACX,CAAC;QACF,IAAI,SAAS,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,KAAK;YAAE,OAAO,MAAM,CAAC;QAC9D,MAAM,IAAI,qBAAqB,CAAC,OAAO,CAAC,OAAO,CAC3C,cAAc,EACd,qBAAqB,EACrB,GAAG,EACH,oFAAoF,EACpF,EAAE,EACF;YACI,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,yBAAyB;YAChC,QAAQ,EAAE,uDAAuD;YACjE,SAAS,EAAE,KAAK;SACnB,CACJ,CAAC,CAAC;IACP,CAAC;IAED,sEAAsE;IACtE,MAAM,CAAC,qBAAqB;QACxB,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACrC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC9B,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,QAAiB;QAC/B,OAAO,QAAQ;YACX,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,0BAA0B,EAAE,iBAAiB,CAAC;YAC5D,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,qCAAqC,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IACvF,CAAC;CACJ"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ApplicationMessage, MessageResource, MessageResourceReceipt } from "@plurnk/plurnk-contracts";
|
|
2
|
+
import type { Db } from "./Db.ts";
|
|
3
|
+
import type { PlurnkSchemeContext } from "./scheme-types.ts";
|
|
4
|
+
export default class MessageResources {
|
|
5
|
+
static publish(body: string, resources: readonly MessageResource[], ctx: PlurnkSchemeContext): Promise<{
|
|
6
|
+
body: string;
|
|
7
|
+
attachments: MessageResourceReceipt[];
|
|
8
|
+
}>;
|
|
9
|
+
static read(db: Db, args: {
|
|
10
|
+
workspaceId: number;
|
|
11
|
+
workerId: number;
|
|
12
|
+
loopId?: number;
|
|
13
|
+
}): Promise<ApplicationMessage[]>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=MessageResources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageResources.d.ts","sourceRoot":"","sources":["../../src/core/MessageResources.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAmB,eAAe,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAE7H,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAK7D,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACjC,OAAa,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,eAAe,EAAE,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,sBAAsB,EAAE,CAAA;KAAE,CAAC,CAqBpK;IAED,OAAa,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAczH;CACJ"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { randomBytes } from "node:crypto";
|
|
2
|
+
import { ResourceNames } from "@plurnk/plurnk-schemes";
|
|
3
|
+
import NativeContent from "./NativeContent.js";
|
|
4
|
+
import EntryCrud from "../schemes/_entry-crud.js";
|
|
5
|
+
import { OperationFailureError } from "./results.js";
|
|
6
|
+
export default class MessageResources {
|
|
7
|
+
static async publish(body, resources, ctx) {
|
|
8
|
+
if (resources.length === 0)
|
|
9
|
+
return { body, attachments: [] };
|
|
10
|
+
const worker = await ctx.db.worker_get.get({ id: ctx.workerId });
|
|
11
|
+
if (worker === undefined)
|
|
12
|
+
throw new Error(`Message recipient ${ctx.workerId} is absent.`);
|
|
13
|
+
const names = new ResourceNames();
|
|
14
|
+
const directory = `/attachments/${randomBytes(4).toString("hex")}`;
|
|
15
|
+
const attachments = [];
|
|
16
|
+
const links = [];
|
|
17
|
+
for (const [index, resource] of resources.entries()) {
|
|
18
|
+
const contentHash = await NativeContent.retain(ctx.db, resource.bytes);
|
|
19
|
+
const name = names.allocate(resource.name, `${contentHash}/${index}`);
|
|
20
|
+
const pathname = `${directory}/${name}`;
|
|
21
|
+
const written = await EntryCrud.writeEntry({ authority: worker.name, pathname }, {
|
|
22
|
+
channels: { body: { content: "", bytes: resource.bytes, mimetype: resource.mediaType } },
|
|
23
|
+
}, ctx, "worker");
|
|
24
|
+
if (written.status >= 400)
|
|
25
|
+
throw new OperationFailureError(written);
|
|
26
|
+
const target = `worker://${worker.name}${pathname}`;
|
|
27
|
+
attachments.push({ name: resource.name || decodeURIComponent(name), mediaType: resource.mediaType, contentHash, target });
|
|
28
|
+
links.push(`<${target}>`);
|
|
29
|
+
}
|
|
30
|
+
return { body: [body, ...links].filter((part) => part.length > 0).join("\n\n"), attachments };
|
|
31
|
+
}
|
|
32
|
+
static async read(db, args) {
|
|
33
|
+
const rows = await db.message_history.all({ workspace_id: args.workspaceId, worker_id: args.workerId, loop_id: args.loopId ?? null });
|
|
34
|
+
return Promise.all(rows.map(async (row) => {
|
|
35
|
+
const evidence = JSON.parse(row.evidence);
|
|
36
|
+
const attachments = await Promise.all((evidence.attachments ?? []).map(async (receipt) => ({
|
|
37
|
+
name: receipt.name, mediaType: receipt.mediaType, target: receipt.target,
|
|
38
|
+
bytes: await NativeContent.read(db, receipt.contentHash),
|
|
39
|
+
})));
|
|
40
|
+
return { id: row.id, loopId: row.loop_id, direction: row.direction, source: row.source, body: row.body,
|
|
41
|
+
answers: JSON.parse(row.answers),
|
|
42
|
+
...(evidence.envelope === undefined ? {} : { envelope: evidence.envelope }), attachments };
|
|
43
|
+
}));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=MessageResources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageResources.js","sourceRoot":"","sources":["../../src/core/MessageResources.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
-- PREP: message_history
|
|
2
|
+
-- {§message-envelope-evidence}: evidence is independent of log curation/publication.
|
|
3
|
+
SELECT m.id AS id, m.loop_id AS loop_id, 'inbound' AS direction, m.source, m.body, m.evidence, '[]' AS answers
|
|
4
|
+
FROM loop_messages m
|
|
5
|
+
JOIN loops l ON l.id = m.loop_id
|
|
6
|
+
JOIN workers w ON w.id = l.worker_id
|
|
7
|
+
WHERE w.workspace_id = $workspace_id AND w.id = $worker_id
|
|
8
|
+
AND ($loop_id IS NULL OR l.id = $loop_id)
|
|
9
|
+
UNION ALL
|
|
10
|
+
SELECT e.id, e.loop_id, 'outbound', e.source, e.content,
|
|
11
|
+
json_object('attachments', json(COALESCE(json_extract(e.rx, '$.attachments'), '[]'))),
|
|
12
|
+
json_extract(e.rx, '$.answers')
|
|
13
|
+
FROM message_responses e
|
|
14
|
+
JOIN workers w ON w.id = e.worker_id
|
|
15
|
+
WHERE w.workspace_id = $workspace_id AND w.id = $worker_id
|
|
16
|
+
AND ($loop_id IS NULL OR e.loop_id = $loop_id)
|
|
17
|
+
ORDER BY loop_id, id;
|
|
18
|
+
-- PREP: message_source_resources
|
|
19
|
+
-- A message keeps the address its minter gave it (`a2a://…`, `agui://…`), and {§message-short-identity}
|
|
20
|
+
-- adds the short `message://<worker>/<key>` alias the worker docs teach.
|
|
21
|
+
SELECT path, body FROM message_sources
|
|
22
|
+
WHERE workspace_id = $workspace_id AND path LIKE $scheme || '://%'
|
|
23
|
+
AND ($target IS NULL OR path = $target)
|
|
24
|
+
UNION ALL
|
|
25
|
+
SELECT key_path AS path, body FROM message_sources
|
|
26
|
+
WHERE workspace_id = $workspace_id AND address IS NOT NULL AND $scheme = 'message'
|
|
27
|
+
AND ($target IS NULL OR key_path = $target);
|
|
28
|
+
|
|
29
|
+
-- PREP: message_source_by_address
|
|
30
|
+
-- The short address the model is taught, or the durable one a client minted.
|
|
31
|
+
SELECT * FROM message_sources WHERE workspace_id = $workspace_id AND key_path = $path
|
|
32
|
+
UNION ALL
|
|
33
|
+
SELECT * FROM message_sources WHERE workspace_id = $workspace_id AND address = $path;
|
|
34
|
+
|
|
35
|
+
-- PREP: message_unanswered_count
|
|
36
|
+
SELECT count(*) AS count FROM unanswered_messages WHERE loop_id = $loop_id;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type HostPaths from "./HostPaths.ts";
|
|
2
2
|
export default class OperatorConfig {
|
|
3
|
-
|
|
3
|
+
#private;
|
|
4
|
+
static renderSeed(token?: string): string;
|
|
4
5
|
static ensure(paths: HostPaths, policySource: string): Promise<boolean>;
|
|
5
6
|
}
|
|
6
7
|
//# sourceMappingURL=OperatorConfig.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OperatorConfig.d.ts","sourceRoot":"","sources":["../../src/core/OperatorConfig.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"OperatorConfig.d.ts","sourceRoot":"","sources":["../../src/core/OperatorConfig.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAQ5C,MAAM,CAAC,OAAO,OAAO,cAAc;;IAU/B,MAAM,CAAC,UAAU,CAAC,KAAK,SAA8B,GAAG,MAAM,CAgD7D;IAED,OAAa,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA8B5E;CACJ"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { randomBytes } from "node:crypto";
|
|
1
2
|
import { constants } from "node:fs";
|
|
2
3
|
import { access, mkdir, readFile, rmdir, unlink, writeFile } from "node:fs/promises";
|
|
3
4
|
const exists = async (path) => access(path, constants.F_OK)
|
|
@@ -6,18 +7,25 @@ const exists = async (path) => access(path, constants.F_OK)
|
|
|
6
7
|
// {§operator-config-discovery} — the user owns this one ordinary dotenv file.
|
|
7
8
|
// Package defaults remain package-owned and are projected on demand.
|
|
8
9
|
export default class OperatorConfig {
|
|
9
|
-
|
|
10
|
+
// {§agui-http-authorization} — a daemon is one trust domain, and on loopback the operator's own
|
|
11
|
+
// browser is inside it: any page they visit can POST to the port. The bearer is the perimeter,
|
|
12
|
+
// so a fresh install mints one instead of shipping the empty value that means "no check". It
|
|
13
|
+
// lands in the same file the client reads through the same cascade, so a default install keeps
|
|
14
|
+
// working untouched; an operator who wants no perimeter empties the line themselves.
|
|
15
|
+
static #mintToken() {
|
|
16
|
+
return randomBytes(32).toString("base64url");
|
|
17
|
+
}
|
|
18
|
+
static renderSeed(token = OperatorConfig.#mintToken()) {
|
|
10
19
|
return [
|
|
11
20
|
"# Plurnk user configuration. This file is yours and is never overwritten.",
|
|
12
21
|
"# Full installed options: plurnk-service config defaults",
|
|
13
22
|
"# Validate this cascade: plurnk-service config check",
|
|
14
23
|
"#",
|
|
15
|
-
"#
|
|
24
|
+
"# The bearer every client presents to this daemon, minted for this install. Anything",
|
|
25
|
+
"# that can reach the port can drive the daemon, so emptying this removes the perimeter.",
|
|
26
|
+
`PLURNK_AGUI_TOKEN=${token}`,
|
|
16
27
|
"",
|
|
17
|
-
"#
|
|
18
|
-
"# PLURNK_MODEL_plurnk=\"plurnk/plurnk\"",
|
|
19
|
-
"# PLURNK_API_KEY=\"...\"",
|
|
20
|
-
"# PLURNK_MODEL=plurnk",
|
|
28
|
+
"# Choose one model profile by uncommenting its complete block.",
|
|
21
29
|
"",
|
|
22
30
|
"# OPENROUTER — bring any supported OpenRouter model.",
|
|
23
31
|
"# PLURNK_MODEL_openrouter=\"openrouter/qwen/qwen3-coder\"",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OperatorConfig.js","sourceRoot":"","sources":["../../src/core/OperatorConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAGrF,MAAM,MAAM,GAAG,KAAK,EAAE,IAAY,EAAoB,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC;KAChF,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;KAChB,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AAExB,8EAA8E;AAC9E,qEAAqE;AACrE,MAAM,CAAC,OAAO,OAAO,cAAc;IAC/B,MAAM,CAAC,UAAU;QACb,OAAO;YACH,2EAA2E;YAC3E,0DAA0D;YAC1D,sDAAsD;YACtD,GAAG;YACH,
|
|
1
|
+
{"version":3,"file":"OperatorConfig.js","sourceRoot":"","sources":["../../src/core/OperatorConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PacketBuilder.d.ts","sourceRoot":"","sources":["../../src/core/PacketBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAkBhD,OAAO,KAAK,EAAE,aAAa,EAAuB,MAAM,mBAAmB,CAAC;AAG5E,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AA2FtE,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CAC3B;AAID,MAAM,CAAC,OAAO,OAAO,aAAa;;IAkB9B,YAAY,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE;QACpC,EAAE,EAAE,EAAE,CAAC;QACP,OAAO,EAAE,cAAc,CAAC;QACxB,SAAS,EAAE,MAAM,gBAAgB,GAAG,SAAS,CAAC;KACjD,EASA;IAED,yBAAyB,CAAC,SAAS,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI,CAEhH;IAiCD,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAItD;IAIK,kBAAkB,CAAC,EACrB,eAAe,EAAE,KAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAY,EAC7G,uBAA8B,EAC9B,gBAA8B,EAC9B,MAAa,GAChB,EAAE;QACC,eAAe,EAAE,WAAW,EAAE,CAAC;QAE/B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;QAC5B,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAEtD,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,QAAQ,CAAC;QAInB,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAG5B,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAGxC,gBAAgB,CAAC,EAAE,WAAW,GAAG,UAAU,CAAC;QAC5C,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B,GAAG,OAAO,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"PacketBuilder.d.ts","sourceRoot":"","sources":["../../src/core/PacketBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAkBhD,OAAO,KAAK,EAAE,aAAa,EAAuB,MAAM,mBAAmB,CAAC;AAG5E,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AA2FtE,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CAC3B;AAID,MAAM,CAAC,OAAO,OAAO,aAAa;;IAkB9B,YAAY,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE;QACpC,EAAE,EAAE,EAAE,CAAC;QACP,OAAO,EAAE,cAAc,CAAC;QACxB,SAAS,EAAE,MAAM,gBAAgB,GAAG,SAAS,CAAC;KACjD,EASA;IAED,yBAAyB,CAAC,SAAS,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI,CAEhH;IAiCD,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAItD;IAIK,kBAAkB,CAAC,EACrB,eAAe,EAAE,KAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAY,EAC7G,uBAA8B,EAC9B,gBAA8B,EAC9B,MAAa,GAChB,EAAE;QACC,eAAe,EAAE,WAAW,EAAE,CAAC;QAE/B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;QAC5B,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAEtD,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,QAAQ,CAAC;QAInB,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAG5B,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAGxC,gBAAgB,CAAC,EAAE,WAAW,GAAG,UAAU,CAAC;QAC5C,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B,GAAG,OAAO,CAAC,aAAa,CAAC,CAmKzB;IAIK,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQzE;IAEK,kBAAkB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAO7D;IAIK,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAkCjG;IAGD,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,gBAAgB,GAAG,IAAI,CAM/D;IAKK,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAC9E,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC,CASF;CAsFJ"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
var _a;
|
|
2
2
|
import WorkerName from "./WorkerName.js";
|
|
3
|
-
import { generatedPathname, renderAddress
|
|
3
|
+
import { generatedPathname, renderAddress } from "./plurnk-uri.js";
|
|
4
4
|
import { contentWeight } from "./content-weight.js";
|
|
5
5
|
import LoopPolicyReader from "./LoopPolicyReader.js";
|
|
6
6
|
import CapabilityPolicies from "./CapabilityPolicies.js";
|
|
@@ -176,30 +176,22 @@ class PacketBuilder {
|
|
|
176
176
|
// {§loop-policy-effective-read} Validate active-loop policy before any
|
|
177
177
|
// packet assembly or provider spend, independently of its presentation.
|
|
178
178
|
await LoopPolicyReader.read(this.#db, loopId);
|
|
179
|
-
await CapabilityPolicies.layers(this.#db, workspaceId);
|
|
179
|
+
await CapabilityPolicies.layers(this.#db, workspaceId, loopId);
|
|
180
180
|
const byRole = (role) => initialMessages.filter((m) => m.role === role).map((m) => m.content).join("\n\n");
|
|
181
181
|
// Resource references are discovered through Turn0, not injected. {§schemes-directory}
|
|
182
182
|
const system_definition = compactDefinitionTables(byRole("system"));
|
|
183
|
-
// The prompt section sources the loop's prompt://<worker>/<loop>/<id> entries.
|
|
184
|
-
// Inject and turn-1 initialization write them. Bare callers that
|
|
185
|
-
// bypass prompt persistence fall back to messages.user.
|
|
186
183
|
const loopSeqRow = await this.#db.engine_loop_sequence.get({ loop_id: loopId });
|
|
187
184
|
const workerName = await WorkerName.forId(this.#db, workerId);
|
|
188
|
-
|
|
189
|
-
const
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
// unfair curation imposition. Fallback: callers that bypass persistence (bare messages)
|
|
199
|
-
// still get their user text rendered directly.
|
|
200
|
-
const prompt = promptRows.length > 0
|
|
201
|
-
? `[${promptRows.map((r) => JSON.stringify(`prompt://${workerName}${r.pathname}`)).join(",\n")}]`
|
|
202
|
-
: byRole("user");
|
|
185
|
+
// {§message-arrival}: source addresses survive curation of their log observations.
|
|
186
|
+
const openMessages = await this.#db.engine_open_messages.all({ loop_id: loopId });
|
|
187
|
+
// {§message-short-identity}: the model is shown the short address, never a client's own
|
|
188
|
+
// transport identity; answering either reaches the same message.
|
|
189
|
+
const prompt = openMessages.length > 0
|
|
190
|
+
? `[${openMessages.map((m) => JSON.stringify({
|
|
191
|
+
path: m.key_path,
|
|
192
|
+
...(m.source === null ? {} : { source: m.source }),
|
|
193
|
+
})).join(",\n")}]`
|
|
194
|
+
: "[]";
|
|
203
195
|
// {§recap}: a non-empty override wins; otherwise read the meta-owned source per packet.
|
|
204
196
|
const recapContent = recap.length > 0
|
|
205
197
|
? recap
|
|
@@ -236,7 +228,7 @@ class PacketBuilder {
|
|
|
236
228
|
const inject = await readPacketInject(); // {§packet-inject} — per-turn; a broken configured path fails hard
|
|
237
229
|
const systemPolicy = await readSystemPolicy(); // XDG config AGENTS.md (or PLURNK_SERVICE_POLICY)
|
|
238
230
|
// {§turn0-agents-stunt} — the PROJECT AGENTS.md rides turn 0 as a foisted
|
|
239
|
-
// READ (LoopDocs → worker:///_plurnk/
|
|
231
|
+
// READ (LoopDocs → worker:///_plurnk/AGENTS.md), not the system prompt.
|
|
240
232
|
// Child-orientation ({§child-orientation}): the live things this worker holds — open streams +
|
|
241
233
|
// unconcluded child workers — surfaced every turn as `{status, path}` JSON pointers (same shape
|
|
242
234
|
// as errors) just above the errors section. Orienting STATE so the model never loses track of
|
|
@@ -250,15 +242,8 @@ class PacketBuilder {
|
|
|
250
242
|
path,
|
|
251
243
|
detail: channels.map((c) => `${c.channel} ${c.lines} lines (+${Math.max(0, c.bytes - c.reported)} bytes)`).join("; "),
|
|
252
244
|
}));
|
|
253
|
-
const childWorkers = (await this.#db.engine_child_workers_live.all({ worker_id: workerId }))
|
|
254
|
-
|
|
255
|
-
return {
|
|
256
|
-
status: r.status, path: `worker://${r.name}`,
|
|
257
|
-
// No clock in a packet (operator, 2026-09-13): a scheduled task is due in so many minutes.
|
|
258
|
-
...(tasks.length === 0 ? {} : { detail: tasks.map((task) => `task ${task.id}: due in ${Math.max(0, Math.round((task.scheduled_at - Date.now()) / 60_000))} min`
|
|
259
|
-
+ (task.repeat_interval_ms === null ? "" : `, every ${task.repeat_interval_ms / 60_000} min`)).join("; ") }),
|
|
260
|
-
};
|
|
261
|
-
});
|
|
245
|
+
const childWorkers = (await this.#db.engine_child_workers_live.all({ worker_id: workerId }))
|
|
246
|
+
.map((r) => ({ status: r.status, path: `worker://${r.name}` }));
|
|
262
247
|
// {§child-orientation} — a child is told whose child it is, so it can name the parent's
|
|
263
248
|
// streams and space ({§worker-read-scope}, #394). The parent rides the `## Worker` identity
|
|
264
249
|
// block; a root worker states `"parent": null` rather than omitting it.
|
|
@@ -287,7 +272,7 @@ class PacketBuilder {
|
|
|
287
272
|
},
|
|
288
273
|
// {§packet-current-turn} — the Worker block opens the status clump below the log: who
|
|
289
274
|
// the actor is, whose child it is, and the coordinate this packet's response becomes —
|
|
290
|
-
// the one fact the sources cannot state about themselves (which `reasoning
|
|
275
|
+
// the one fact the sources cannot state about themselves (which `reasoning://<worker>/L/T` is
|
|
291
276
|
// the model's own). It changes every turn, so it never precedes the log.
|
|
292
277
|
{ name: "worker", slot: "user", header: "Worker", content: JSON.stringify({ path: `worker://${workerName}`, parent: parentPath, loop: loopSeqRow?.sequence ?? loopId, turn: currentTurnSeq }) },
|
|
293
278
|
// The per-turn status clump follows the log ({§packet-cache-monotone}).
|
|
@@ -301,9 +286,9 @@ class PacketBuilder {
|
|
|
301
286
|
// Familiar token language is a deliberate final model projection;
|
|
302
287
|
// internally this is curation weight, never provider admission.
|
|
303
288
|
{ name: "budget", slot: "user", header: "Context Curation", content: budgetReadout },
|
|
304
|
-
// The
|
|
305
|
-
// bodies arrive through
|
|
306
|
-
{ name: "
|
|
289
|
+
// The messages section closes the status clump as a pointer list of open
|
|
290
|
+
// arrivals; bodies arrive through their inbound SEND rows ({§message-arrival}).
|
|
291
|
+
{ name: "messages", slot: "user", header: "Open Messages", content: prompt },
|
|
307
292
|
{ name: "recap", slot: "user", header: "Recap", content: recapContent },
|
|
308
293
|
];
|
|
309
294
|
// Plugin packet control ({§packet-assembly}): trusted schemes rewrite the
|
|
@@ -435,7 +420,7 @@ class PacketBuilder {
|
|
|
435
420
|
// User prompts are first-class actionless log entries written by
|
|
436
421
|
// runTurn. They surface naturally in this query without synthetic
|
|
437
422
|
// EDIT/READ delivery rows.
|
|
438
|
-
const rows = await this.#db.engine_render_log.all({ worker_id: workerId });
|
|
423
|
+
const rows = await this.#db.engine_render_log.all({ worker_id: workerId, turn_id: turnId });
|
|
439
424
|
return rows.map((r) => {
|
|
440
425
|
const tx = r.mimetype_tx === "application/json" ? JSON.parse(r.tx) : r.tx;
|
|
441
426
|
const rx = r.mimetype_rx === "application/json" ? JSON.parse(r.rx) : r.rx;
|