@plurnk/plurnk-service 1.7.0 → 1.9.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 +49 -42
- package/INSTALL.md +48 -11
- package/README.md +12 -2
- package/SPEC.md +1166 -475
- package/digest-sql/channel-dispositions/dispositions.sql +15 -0
- package/digest-sql/channel-state/state.sql +6 -0
- package/digest-sql/curation/curation.sql +5 -0
- package/digest-sql/derivations/derivations.sql +4 -0
- package/digest-sql/embeddings/embeddings.sql +4 -0
- package/digest-sql/entry-dispositions/dispositions.sql +15 -0
- package/digest-sql/entry-state/state.sql +6 -0
- package/digest-sql/token-counts/token-counts.sql +2 -0
- package/dist/Paths.d.ts +0 -4
- package/dist/Paths.d.ts.map +1 -1
- package/dist/Paths.js +1 -21
- package/dist/Paths.js.map +1 -1
- package/dist/build-info.json +1 -1
- package/dist/content/read-projector.d.ts.map +1 -1
- package/dist/content/read-projector.js +4 -3
- package/dist/content/read-projector.js.map +1 -1
- package/dist/core/BudgetReadout.d.ts.map +1 -1
- package/dist/core/BudgetReadout.js +12 -22
- package/dist/core/BudgetReadout.js.map +1 -1
- package/dist/core/ChannelWrite.d.ts +8 -3
- package/dist/core/ChannelWrite.d.ts.map +1 -1
- package/dist/core/ChannelWrite.js +40 -8
- package/dist/core/ChannelWrite.js.map +1 -1
- package/dist/core/ChannelWrite.sql +19 -5
- package/dist/core/CoreSchemeServices.d.ts +7 -3
- package/dist/core/CoreSchemeServices.d.ts.map +1 -1
- package/dist/core/CoreSchemeServices.js +8 -1
- package/dist/core/CoreSchemeServices.js.map +1 -1
- package/dist/core/Dispatcher.d.ts +15 -6
- package/dist/core/Dispatcher.d.ts.map +1 -1
- package/dist/core/Dispatcher.js +352 -306
- package/dist/core/Dispatcher.js.map +1 -1
- package/dist/core/Engine.d.ts +22 -10
- package/dist/core/Engine.d.ts.map +1 -1
- package/dist/core/Engine.js +86 -46
- package/dist/core/Engine.js.map +1 -1
- package/dist/core/Engine.sql +202 -177
- package/dist/core/EntryAddressBinding.d.ts +32 -0
- package/dist/core/EntryAddressBinding.d.ts.map +1 -0
- package/dist/core/EntryAddressBinding.js +93 -0
- package/dist/core/EntryAddressBinding.js.map +1 -0
- package/dist/core/ExecutorRegistry.d.ts +12 -6
- package/dist/core/ExecutorRegistry.d.ts.map +1 -1
- package/dist/core/ExecutorRegistry.js +34 -31
- package/dist/core/ExecutorRegistry.js.map +1 -1
- package/dist/core/HostPaths.d.ts +29 -0
- package/dist/core/HostPaths.d.ts.map +1 -0
- package/dist/core/HostPaths.js +74 -0
- package/dist/core/HostPaths.js.map +1 -0
- package/dist/core/LegacyHome.d.ts +10 -0
- package/dist/core/LegacyHome.d.ts.map +1 -0
- package/dist/core/LegacyHome.js +170 -0
- package/dist/core/LegacyHome.js.map +1 -0
- package/dist/core/LogBody.d.ts +1 -1
- package/dist/core/LogBody.d.ts.map +1 -1
- package/dist/core/LogBody.js +21 -3
- package/dist/core/LogBody.js.map +1 -1
- package/dist/core/LogEntryProjection.js +1 -1
- package/dist/core/LogEntryProjection.js.map +1 -1
- package/dist/core/LogVisibility.d.ts +28 -0
- package/dist/core/LogVisibility.d.ts.map +1 -0
- package/dist/core/LogVisibility.js +215 -0
- package/dist/core/LogVisibility.js.map +1 -0
- package/dist/core/LoopLifecycle.d.ts +1 -0
- package/dist/core/LoopLifecycle.d.ts.map +1 -1
- package/dist/core/LoopLifecycle.js +8 -0
- package/dist/core/LoopLifecycle.js.map +1 -1
- package/dist/core/LoopLifecycle.sql +10 -0
- package/dist/core/OperatorConfig.d.ts +6 -0
- package/dist/core/OperatorConfig.d.ts.map +1 -0
- package/dist/core/OperatorConfig.js +95 -0
- package/dist/core/OperatorConfig.js.map +1 -0
- package/dist/core/OverflowTurn.d.ts +11 -0
- package/dist/core/OverflowTurn.d.ts.map +1 -0
- package/dist/core/OverflowTurn.js +81 -0
- package/dist/core/OverflowTurn.js.map +1 -0
- package/dist/core/Owner.js +3 -3
- package/dist/core/Owner.js.map +1 -1
- package/dist/core/PacketBuilder.d.ts +7 -15
- package/dist/core/PacketBuilder.d.ts.map +1 -1
- package/dist/core/PacketBuilder.js +64 -127
- package/dist/core/PacketBuilder.js.map +1 -1
- package/dist/core/ProblemLog.js +1 -1
- package/dist/core/ProblemLog.js.map +1 -1
- package/dist/core/ProposalLifecycle.d.ts +4 -1
- package/dist/core/ProposalLifecycle.d.ts.map +1 -1
- package/dist/core/ProposalLifecycle.js +86 -47
- package/dist/core/ProposalLifecycle.js.map +1 -1
- package/dist/core/ProviderInstantiate.d.ts +9 -5
- package/dist/core/ProviderInstantiate.d.ts.map +1 -1
- package/dist/core/ProviderInstantiate.js +99 -104
- package/dist/core/ProviderInstantiate.js.map +1 -1
- package/dist/core/ReasoningEvent.d.ts +13 -0
- package/dist/core/ReasoningEvent.d.ts.map +1 -0
- package/dist/core/ReasoningEvent.js +6 -0
- package/dist/core/ReasoningEvent.js.map +1 -0
- package/dist/core/ResourceMutations.d.ts +15 -19
- package/dist/core/ResourceMutations.d.ts.map +1 -1
- package/dist/core/ResourceMutations.js +118 -41
- package/dist/core/ResourceMutations.js.map +1 -1
- package/dist/core/SchemeRegistry.d.ts +12 -12
- package/dist/core/SchemeRegistry.d.ts.map +1 -1
- package/dist/core/SchemeRegistry.js +58 -57
- package/dist/core/SchemeRegistry.js.map +1 -1
- package/dist/core/ToolResources.d.ts +19 -0
- package/dist/core/ToolResources.d.ts.map +1 -0
- package/dist/core/ToolResources.js +123 -0
- package/dist/core/ToolResources.js.map +1 -0
- package/dist/core/Turn.d.ts +27 -0
- package/dist/core/Turn.d.ts.map +1 -0
- package/dist/core/Turn.js +43 -0
- package/dist/core/Turn.js.map +1 -0
- package/dist/core/Turn.sql +72 -0
- package/dist/core/TurnOps.d.ts +7 -0
- package/dist/core/TurnOps.d.ts.map +1 -0
- package/dist/core/TurnOps.js +73 -0
- package/dist/core/TurnOps.js.map +1 -0
- package/dist/core/TurnRunner.d.ts +56 -5
- package/dist/core/TurnRunner.d.ts.map +1 -1
- package/dist/core/TurnRunner.js +1163 -929
- package/dist/core/TurnRunner.js.map +1 -1
- package/dist/core/WorkerName.d.ts +2 -1
- package/dist/core/WorkerName.d.ts.map +1 -1
- package/dist/core/WorkerName.js +2 -1
- package/dist/core/WorkerName.js.map +1 -1
- package/dist/core/WorkerName.sql +17 -2
- package/dist/core/WorkspaceGate.js +1 -1
- package/dist/core/WorkspaceGate.js.map +1 -1
- package/dist/core/caps/CapsResolve.d.ts +2 -2
- package/dist/core/caps/CapsResolve.d.ts.map +1 -1
- package/dist/core/caps/CapsResolve.js +5 -7
- package/dist/core/caps/CapsResolve.js.map +1 -1
- package/dist/core/caps/DbChannelCaps.d.ts +1 -1
- package/dist/core/caps/DbChannelCaps.d.ts.map +1 -1
- package/dist/core/caps/DbChannelCaps.js +13 -11
- package/dist/core/caps/DbChannelCaps.js.map +1 -1
- package/dist/core/caps/DbEntryCaps.d.ts +5 -5
- package/dist/core/caps/DbEntryCaps.d.ts.map +1 -1
- package/dist/core/caps/DbEntryCaps.js +27 -30
- package/dist/core/caps/DbEntryCaps.js.map +1 -1
- package/dist/core/caps/DbNotifyCaps.d.ts +1 -1
- package/dist/core/caps/DbNotifyCaps.d.ts.map +1 -1
- package/dist/core/caps/DbNotifyCaps.js +5 -3
- package/dist/core/caps/DbNotifyCaps.js.map +1 -1
- package/dist/core/caps/DbSubscriptionCaps.d.ts +3 -3
- package/dist/core/caps/DbSubscriptionCaps.d.ts.map +1 -1
- package/dist/core/caps/DbSubscriptionCaps.js +16 -26
- package/dist/core/caps/DbSubscriptionCaps.js.map +1 -1
- package/dist/core/caps/SchemeCtxImpl.d.ts +6 -4
- package/dist/core/caps/SchemeCtxImpl.d.ts.map +1 -1
- package/dist/core/caps/SchemeCtxImpl.js +37 -5
- package/dist/core/caps/SchemeCtxImpl.js.map +1 -1
- package/dist/core/env-defaults.d.ts.map +1 -1
- package/dist/core/env-defaults.js +7 -5
- package/dist/core/env-defaults.js.map +1 -1
- package/dist/core/file-creation-policy.d.ts +9 -0
- package/dist/core/file-creation-policy.d.ts.map +1 -0
- package/dist/core/file-creation-policy.js +25 -0
- package/dist/core/file-creation-policy.js.map +1 -0
- package/dist/core/fork.d.ts +4 -1
- package/dist/core/fork.d.ts.map +1 -1
- package/dist/core/fork.js +39 -16
- package/dist/core/fork.js.map +1 -1
- package/dist/core/fork.sql +83 -40
- package/dist/core/git-env.d.ts +0 -1
- package/dist/core/git-env.d.ts.map +1 -1
- package/dist/core/git-env.js +0 -3
- package/dist/core/git-env.js.map +1 -1
- package/dist/core/git-membership.d.ts +19 -1
- package/dist/core/git-membership.d.ts.map +1 -1
- package/dist/core/git-membership.js +233 -74
- package/dist/core/git-membership.js.map +1 -1
- package/dist/core/git-state.d.ts.map +1 -1
- package/dist/core/git-state.js +13 -14
- package/dist/core/git-state.js.map +1 -1
- package/dist/core/operation-target-groups.d.ts +3 -0
- package/dist/core/operation-target-groups.d.ts.map +1 -0
- package/dist/core/operation-target-groups.js +53 -0
- package/dist/core/operation-target-groups.js.map +1 -0
- package/dist/core/packet-inject.d.ts +0 -1
- package/dist/core/packet-inject.d.ts.map +1 -1
- package/dist/core/packet-inject.js +6 -13
- package/dist/core/packet-inject.js.map +1 -1
- package/dist/core/packet-wire.d.ts +4 -0
- package/dist/core/packet-wire.d.ts.map +1 -1
- package/dist/core/packet-wire.js +226 -53
- package/dist/core/packet-wire.js.map +1 -1
- package/dist/core/plurnk-uri.d.ts +14 -3
- package/dist/core/plurnk-uri.d.ts.map +1 -1
- package/dist/core/plurnk-uri.js +62 -24
- package/dist/core/plurnk-uri.js.map +1 -1
- package/dist/core/scheme-types.d.ts +1 -0
- package/dist/core/scheme-types.d.ts.map +1 -1
- package/dist/core/teaching.d.ts.map +1 -1
- package/dist/core/teaching.js +4 -5
- package/dist/core/teaching.js.map +1 -1
- package/dist/core/worker-ops.sql +10 -6
- package/dist/core/worker-settings.d.ts +10 -0
- package/dist/core/worker-settings.d.ts.map +1 -0
- package/dist/core/worker-settings.js +32 -0
- package/dist/core/worker-settings.js.map +1 -0
- package/dist/core/workspace-settings.d.ts +2 -11
- package/dist/core/workspace-settings.d.ts.map +1 -1
- package/dist/core/workspace-settings.js +7 -47
- package/dist/core/workspace-settings.js.map +1 -1
- package/dist/digest/Digest.d.ts.map +1 -1
- package/dist/digest/Digest.js +164 -92
- package/dist/digest/Digest.js.map +1 -1
- package/dist/digest/digest.sql +9 -3
- package/dist/observe/genai.d.ts +9 -0
- package/dist/observe/genai.d.ts.map +1 -0
- package/dist/observe/genai.js +31 -0
- package/dist/observe/genai.js.map +1 -0
- package/dist/observe/spans.d.ts +3 -3
- package/dist/observe/spans.d.ts.map +1 -1
- package/dist/observe/spans.js +20 -5
- package/dist/observe/spans.js.map +1 -1
- package/dist/schemes/EffectPolicy.d.ts +3 -0
- package/dist/schemes/EffectPolicy.d.ts.map +1 -1
- package/dist/schemes/EffectPolicy.js +38 -6
- package/dist/schemes/EffectPolicy.js.map +1 -1
- package/dist/schemes/Exec.d.ts +3 -2
- package/dist/schemes/Exec.d.ts.map +1 -1
- package/dist/schemes/Exec.js +109 -34
- package/dist/schemes/Exec.js.map +1 -1
- package/dist/schemes/ExecOutputScheme.d.ts.map +1 -1
- package/dist/schemes/ExecOutputScheme.js +5 -4
- package/dist/schemes/ExecOutputScheme.js.map +1 -1
- package/dist/schemes/File.d.ts.map +1 -1
- package/dist/schemes/File.js +170 -80
- package/dist/schemes/File.js.map +1 -1
- package/dist/schemes/Log.d.ts +6 -2
- package/dist/schemes/Log.d.ts.map +1 -1
- package/dist/schemes/Log.js +73 -22
- package/dist/schemes/Log.js.map +1 -1
- package/dist/schemes/Log.sql +25 -7
- package/dist/schemes/Prompt.d.ts +2 -3
- package/dist/schemes/Prompt.d.ts.map +1 -1
- package/dist/schemes/Prompt.js +5 -9
- package/dist/schemes/Prompt.js.map +1 -1
- package/dist/schemes/QuestionTool.d.ts +10 -0
- package/dist/schemes/QuestionTool.d.ts.map +1 -0
- package/dist/schemes/QuestionTool.js +81 -0
- package/dist/schemes/QuestionTool.js.map +1 -0
- package/dist/schemes/Skill.d.ts.map +1 -1
- package/dist/schemes/Skill.js +6 -1
- package/dist/schemes/Skill.js.map +1 -1
- package/dist/schemes/Worker.d.ts.map +1 -1
- package/dist/schemes/Worker.js +97 -34
- package/dist/schemes/Worker.js.map +1 -1
- package/dist/schemes/_entry-crud.d.ts +5 -5
- package/dist/schemes/_entry-crud.d.ts.map +1 -1
- package/dist/schemes/_entry-crud.js +22 -17
- package/dist/schemes/_entry-crud.js.map +1 -1
- package/dist/schemes/_entry-crud.sql +77 -24
- package/dist/schemes/_entry-find.d.ts +8 -5
- package/dist/schemes/_entry-find.d.ts.map +1 -1
- package/dist/schemes/_entry-find.js +121 -40
- package/dist/schemes/_entry-find.js.map +1 -1
- package/dist/schemes/_entry-find.sql +16 -11
- package/dist/schemes/_entry-graph.sql +2 -6
- package/dist/schemes/_entry-manifest.d.ts +2 -2
- package/dist/schemes/_entry-manifest.d.ts.map +1 -1
- package/dist/schemes/_entry-manifest.js +18 -6
- package/dist/schemes/_entry-manifest.js.map +1 -1
- package/dist/schemes/_entry-ops.d.ts +6 -5
- package/dist/schemes/_entry-ops.d.ts.map +1 -1
- package/dist/schemes/_entry-ops.js +39 -46
- package/dist/schemes/_entry-ops.js.map +1 -1
- package/dist/schemes/_entry-ops.sql +9 -6
- package/dist/schemes/_entry-send.d.ts +2 -2
- package/dist/schemes/_entry-send.d.ts.map +1 -1
- package/dist/schemes/_entry-send.js +16 -14
- package/dist/schemes/_entry-send.js.map +1 -1
- package/dist/schemes/_search-index.d.ts.map +1 -1
- package/dist/schemes/_search-index.js +39 -25
- package/dist/schemes/_search-index.js.map +1 -1
- package/dist/server/Daemon.d.ts +98 -15
- package/dist/server/Daemon.d.ts.map +1 -1
- package/dist/server/Daemon.js +864 -348
- package/dist/server/Daemon.js.map +1 -1
- package/dist/server/DaemonModule.d.ts +84 -19
- package/dist/server/DaemonModule.d.ts.map +1 -1
- package/dist/server/DrainSupervisor.d.ts +15 -10
- package/dist/server/DrainSupervisor.d.ts.map +1 -1
- package/dist/server/DrainSupervisor.js +70 -19
- package/dist/server/DrainSupervisor.js.map +1 -1
- package/dist/server/Functionality.d.ts +44 -0
- package/dist/server/Functionality.d.ts.map +1 -0
- package/dist/server/Functionality.js +422 -0
- package/dist/server/Functionality.js.map +1 -0
- package/dist/server/FunctionalityManager.d.ts +22 -0
- package/dist/server/FunctionalityManager.d.ts.map +1 -0
- package/dist/server/FunctionalityManager.js +121 -0
- package/dist/server/FunctionalityManager.js.map +1 -0
- package/dist/server/SkillsFunctionality.d.ts +61 -0
- package/dist/server/SkillsFunctionality.d.ts.map +1 -0
- package/dist/server/SkillsFunctionality.js +449 -0
- package/dist/server/SkillsFunctionality.js.map +1 -0
- package/dist/server/WorkerCapabilities.d.ts +21 -0
- package/dist/server/WorkerCapabilities.d.ts.map +1 -0
- package/dist/server/WorkerCapabilities.js +214 -0
- package/dist/server/WorkerCapabilities.js.map +1 -0
- package/dist/server/WorkerResidency.d.ts +40 -0
- package/dist/server/WorkerResidency.d.ts.map +1 -0
- package/dist/server/WorkerResidency.js +283 -0
- package/dist/server/WorkerResidency.js.map +1 -0
- package/dist/server/client-input.d.ts +6 -2
- package/dist/server/client-input.d.ts.map +1 -1
- package/dist/server/client-input.js +72 -32
- package/dist/server/client-input.js.map +1 -1
- package/dist/server/dispatch-as-plurnk.d.ts +2 -2
- package/dist/server/dispatch-as-plurnk.d.ts.map +1 -1
- package/dist/server/dispatch-as-plurnk.js +109 -23
- package/dist/server/dispatch-as-plurnk.js.map +1 -1
- package/dist/server/drain.sql +33 -13
- package/dist/server/envelope.d.ts +7 -2
- package/dist/server/envelope.d.ts.map +1 -1
- package/dist/server/envelope.js +12 -6
- package/dist/server/envelope.js.map +1 -1
- package/dist/server/envelope.sql +36 -4
- package/dist/server/lifecycle-recovery.sql +24 -17
- package/dist/server/logEntry.d.ts +2 -1
- package/dist/server/logEntry.d.ts.map +1 -1
- package/dist/server/logEntry.js +3 -2
- package/dist/server/logEntry.js.map +1 -1
- package/dist/server/logEntry.sql +7 -0
- package/dist/server/loop-model.d.ts +2 -2
- package/dist/server/loop-model.d.ts.map +1 -1
- package/dist/server/loop-model.js +23 -33
- package/dist/server/loop-model.js.map +1 -1
- package/dist/server/loopDocs.d.ts +2 -1
- package/dist/server/loopDocs.d.ts.map +1 -1
- package/dist/server/loopDocs.js +88 -21
- package/dist/server/loopDocs.js.map +1 -1
- package/dist/server/loopDocs.sql +14 -8
- package/dist/server/model-catalog.d.ts +3 -0
- package/dist/server/model-catalog.d.ts.map +1 -0
- package/dist/server/model-catalog.js +83 -0
- package/dist/server/model-catalog.js.map +1 -0
- package/dist/server/model-route.d.ts +7 -0
- package/dist/server/model-route.d.ts.map +1 -0
- package/dist/server/model-route.js +47 -0
- package/dist/server/model-route.js.map +1 -0
- package/dist/server/module-discovery.d.ts +13 -0
- package/dist/server/module-discovery.d.ts.map +1 -0
- package/dist/server/module-discovery.js +103 -0
- package/dist/server/module-discovery.js.map +1 -0
- package/dist/server/seam-entry-read.sql +9 -7
- package/dist/server/seam-log-read.sql +1 -1
- package/dist/server/seam-loop.sql +10 -1
- package/dist/server/seam-proposal-list.sql +4 -2
- package/dist/server/worker-capabilities.sql +19 -0
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +193 -124
- package/dist/service.js.map +1 -1
- package/migrations/001_schema.sql +905 -196
- package/package.json +40 -38
- package/dist/core/ExecutableTools.d.ts +0 -11
- package/dist/core/ExecutableTools.d.ts.map +0 -1
- package/dist/core/ExecutableTools.js +0 -49
- package/dist/core/ExecutableTools.js.map +0 -1
- package/dist/core/JournalTurn.d.ts +0 -9
- package/dist/core/JournalTurn.d.ts.map +0 -1
- package/dist/core/JournalTurn.js +0 -14
- package/dist/core/JournalTurn.js.map +0 -1
- package/dist/core/JournalTurn.sql +0 -10
- package/dist/core/git-iso.d.ts +0 -13
- package/dist/core/git-iso.d.ts.map +0 -1
- package/dist/core/git-iso.js +0 -267
- package/dist/core/git-iso.js.map +0 -1
- package/dist/core/search-gate.d.ts +0 -17
- package/dist/core/search-gate.d.ts.map +0 -1
- package/dist/core/search-gate.js +0 -77
- package/dist/core/search-gate.js.map +0 -1
- package/dist/digest/Digest.sql +0 -1
- package/dist/server/workspace-capabilities.sql +0 -19
package/dist/core/Engine.sql
CHANGED
|
@@ -6,13 +6,13 @@ SELECT status FROM loops WHERE id = $loop_id;
|
|
|
6
6
|
-- PREP: engine_worker_has_live_child
|
|
7
7
|
-- A non-terminal child worker (worker:// spawn/fork set parent_worker_id) — a "live thing the worker holds",
|
|
8
8
|
-- like an open stream. A SEND signal 200 while one exists is a premature-terminate ({§send-premature-terminate}).
|
|
9
|
-
-- Live = a child
|
|
9
|
+
-- Live = a child with ANY unresolved loop (100/102/202) — the SAME definition
|
|
10
10
|
-- engine_child_workers_live uses for the Active Child Workers orientation, so the 409 gate and the section the model
|
|
11
11
|
-- reads NEVER disagree: a refused termination is always backed by a child the model can SEE and KILL
|
|
12
|
-
-- ({§child-orientation}).
|
|
13
|
-
--
|
|
12
|
+
-- ({§child-orientation}). Administrative loops may interleave with model loops, so newest-loop
|
|
13
|
+
-- inference is not a valid worker-liveness test.
|
|
14
14
|
SELECT 1 AS live FROM workers r
|
|
15
|
-
JOIN loops l ON l.
|
|
15
|
+
JOIN loops l ON l.worker_id = r.id
|
|
16
16
|
WHERE r.parent_worker_id = $worker_id AND l.status IN (100, 102, 202) LIMIT 1;
|
|
17
17
|
|
|
18
18
|
-- PREP: engine_count_active_loops_for_worker
|
|
@@ -36,9 +36,18 @@ UPDATE loops SET flags = $flags WHERE id = $loop_id;
|
|
|
36
36
|
UPDATE loops SET open_paths = $open_paths WHERE id = $loop_id;
|
|
37
37
|
|
|
38
38
|
-- PREP: engine_get_loop_prompt
|
|
39
|
-
-- Initial prompt frame.
|
|
40
|
-
--
|
|
41
|
-
SELECT prompt, sequence, open_paths
|
|
39
|
+
-- Initial prompt frame. Its durable log occurrence, not a process-local/model
|
|
40
|
+
-- ordinal, decides whether runTurn still needs to publish it.
|
|
41
|
+
SELECT l.prompt, l.prompt_source, l.sequence, l.open_paths,
|
|
42
|
+
EXISTS (
|
|
43
|
+
SELECT 1
|
|
44
|
+
FROM log_entries le
|
|
45
|
+
WHERE le.loop_id = l.id
|
|
46
|
+
AND le.op = 'prompt'
|
|
47
|
+
AND le.pathname = '/' || l.sequence || '/1'
|
|
48
|
+
) AS prompt_published
|
|
49
|
+
FROM loops l
|
|
50
|
+
WHERE l.id = $loop_id;
|
|
42
51
|
|
|
43
52
|
-- PREP: engine_reclaim_queued_loop
|
|
44
53
|
-- {§worker-lifecycle-wake-requeue-not-terminal} — atomic 100→102 re-claim by loop id. A wake
|
|
@@ -52,22 +61,11 @@ UPDATE loops SET status = 102 WHERE id = $loop_id AND status = 100;
|
|
|
52
61
|
-- each owning use site with its declared composition semantics.
|
|
53
62
|
SELECT settings FROM workspaces WHERE id = $workspace_id;
|
|
54
63
|
|
|
55
|
-
-- PREP: engine_target_diverged_this_turn
|
|
56
|
-
-- #note10 — did this entry diverge on disk THIS turn? A source=file env-delta for the
|
|
57
|
-
-- target, materialized into this worker's log at the current turn, means the model's view
|
|
58
|
-
-- predates the ambient change — a auto resolution of a same-turn EDIT would clobber it.
|
|
59
|
-
SELECT 1 AS hit
|
|
60
|
-
FROM log_entries
|
|
61
|
-
WHERE worker_id = $worker_id AND turn_id = $turn_id
|
|
62
|
-
AND origin = 'plurnk' AND source = 'file' AND op = 'EDIT'
|
|
63
|
-
AND scheme IS $scheme AND pathname = $pathname
|
|
64
|
-
LIMIT 1;
|
|
65
|
-
|
|
66
64
|
-- PREP: engine_list_owner_entries
|
|
67
65
|
-- {§entry-owner} — one principal's entries (catalogRowsFor source for an owner-scoped FIND/foist):
|
|
68
66
|
-- the commons, a worker's own space, or a named space — exactly one owner's rows, its perspective.
|
|
69
|
-
SELECT e.id AS entry_id, e.scheme, e.pathname, ec.name AS channel, ec.content, ec.mimetype, ec.weight AS weight,
|
|
70
|
-
d.parse_issues,
|
|
67
|
+
SELECT e.id AS entry_id, e.scheme, e.authority, e.pathname, ec.name AS channel, ec.content, ec.mimetype, ec.weight AS weight, ec.deep_hash,
|
|
68
|
+
d.parse_issues, d.summary,
|
|
71
69
|
s.id AS subscription_id,
|
|
72
70
|
CASE WHEN s.closed_at IS NULL
|
|
73
71
|
THEN CAST(unixepoch('now') - unixepoch(s.opened_at) AS INTEGER)
|
|
@@ -76,7 +74,8 @@ SELECT e.id AS entry_id, e.scheme, e.pathname, ec.name AS channel, ec.content, e
|
|
|
76
74
|
s.close_status
|
|
77
75
|
FROM entries e
|
|
78
76
|
JOIN entry_channels ec ON ec.entry_id = e.id
|
|
79
|
-
|
|
77
|
+
JOIN workers owner ON owner.id = e.owner_id
|
|
78
|
+
LEFT JOIN derivations d ON d.deep_hash = ec.deep_hash
|
|
80
79
|
LEFT JOIN subscriptions s ON s.id = (
|
|
81
80
|
SELECT latest.id
|
|
82
81
|
FROM subscriptions latest
|
|
@@ -84,22 +83,23 @@ LEFT JOIN subscriptions s ON s.id = (
|
|
|
84
83
|
ORDER BY latest.id DESC
|
|
85
84
|
LIMIT 1
|
|
86
85
|
)
|
|
87
|
-
WHERE
|
|
86
|
+
WHERE owner.workspace_id = $workspace_id AND e.owner_id = $owner_id
|
|
88
87
|
ORDER BY e.updated_at ASC, e.id ASC, ec.name;
|
|
89
88
|
|
|
90
89
|
-- PREP: engine_next_turn_sequence
|
|
91
90
|
SELECT COALESCE(MAX(sequence), 0) + 1 AS next FROM turns WHERE loop_id = $loop_id;
|
|
92
91
|
|
|
93
92
|
-- PREP: engine_loop_usage
|
|
94
|
-
-- Latest-turn gauge ({§tokenomics-client-gauge}), surfaced beside the derived
|
|
93
|
+
-- Latest packet-bearing model-turn gauge ({§tokenomics-client-gauge}), surfaced beside the derived
|
|
95
94
|
-- accounting projection on {§notifications-loop-terminated}. Physical usage
|
|
96
95
|
-- and capacity bind to the same latest completed emission call. A preflight
|
|
97
96
|
-- rejection has capacity evidence but no physical input usage; neither fact
|
|
98
|
-
-- falls back to an earlier call
|
|
97
|
+
-- falls back to an earlier call. Packetless chronology cannot erase the latest
|
|
98
|
+
-- assembled model request.
|
|
99
99
|
WITH latest_turn AS (
|
|
100
100
|
SELECT id, packet, usage_curation_budget, meta
|
|
101
101
|
FROM turns
|
|
102
|
-
WHERE loop_id = $loop_id
|
|
102
|
+
WHERE loop_id = $loop_id AND packet IS NOT NULL
|
|
103
103
|
ORDER BY sequence DESC
|
|
104
104
|
LIMIT 1
|
|
105
105
|
), latest_emission AS (
|
|
@@ -167,29 +167,6 @@ SELECT l.sequence AS loop_seq, t.sequence AS turn_seq
|
|
|
167
167
|
FROM loops l, turns t
|
|
168
168
|
WHERE l.id = $loop_id AND t.id = $turn_id;
|
|
169
169
|
|
|
170
|
-
-- PREP: engine_open_turn
|
|
171
|
-
-- Turn-as-container model: insert a turn row at runTurn open with no assembled
|
|
172
|
-
-- model request and status=102 (in-progress). Pre-model writes
|
|
173
|
-
-- (the user prompt; later, system signals/notices) land into
|
|
174
|
-
-- this row before the provider is called. The turn is then "closed"
|
|
175
|
-
-- via engine_close_turn with the final packet + status + usage stats
|
|
176
|
-
-- after dispatch completes.
|
|
177
|
-
INSERT INTO turns (loop_id, sequence, status)
|
|
178
|
-
VALUES ($loop_id, $sequence, 102)
|
|
179
|
-
RETURNING id;
|
|
180
|
-
|
|
181
|
-
-- PREP: engine_close_turn
|
|
182
|
-
-- Updates the turn with the response packet and terminal metadata once dispatch
|
|
183
|
-
-- is complete. Provider attempts own and materialize usage/cost above this path.
|
|
184
|
-
UPDATE turns SET
|
|
185
|
-
status = $status,
|
|
186
|
-
packet = $packet,
|
|
187
|
-
usage_curation_budget = $usage_curation_budget,
|
|
188
|
-
finish_reason = $finish_reason,
|
|
189
|
-
model = $model,
|
|
190
|
-
meta = $meta
|
|
191
|
-
WHERE id = $id;
|
|
192
|
-
|
|
193
170
|
-- PREP: engine_open_model_call
|
|
194
171
|
-- Logical identity and request attribution become durable before provider I/O.
|
|
195
172
|
INSERT INTO model_calls (turn_id, sequence, kind, attributions, model)
|
|
@@ -263,7 +240,7 @@ WHERE id = $id AND state = 'pending';
|
|
|
263
240
|
-- The latest subscription carries stream lifecycle into the catalog. `seconds`
|
|
264
241
|
-- is the live age of an open stream; close_status is the exact terminal status
|
|
265
242
|
-- of a closed one. Entries with no subscription remain ordinary static entries.
|
|
266
|
-
SELECT e.id AS entry_id, e.scheme, e.pathname, ec.name AS channel, ec.content, ec.mimetype, ec.weight AS weight,
|
|
243
|
+
SELECT e.id AS entry_id, e.scheme, e.authority, e.pathname, ec.name AS channel, ec.content, ec.mimetype, ec.weight AS weight, ec.deep_hash,
|
|
267
244
|
s.id AS subscription_id,
|
|
268
245
|
CASE WHEN s.closed_at IS NULL
|
|
269
246
|
THEN CAST(unixepoch('now') - unixepoch(s.opened_at) AS INTEGER)
|
|
@@ -272,6 +249,7 @@ SELECT e.id AS entry_id, e.scheme, e.pathname, ec.name AS channel, ec.content, e
|
|
|
272
249
|
s.close_status
|
|
273
250
|
FROM entries e
|
|
274
251
|
JOIN entry_channels ec ON ec.entry_id = e.id
|
|
252
|
+
JOIN workers owner ON owner.id = e.owner_id
|
|
275
253
|
LEFT JOIN subscriptions s ON s.id = (
|
|
276
254
|
SELECT latest.id
|
|
277
255
|
FROM subscriptions latest
|
|
@@ -279,7 +257,7 @@ LEFT JOIN subscriptions s ON s.id = (
|
|
|
279
257
|
ORDER BY latest.id DESC
|
|
280
258
|
LIMIT 1
|
|
281
259
|
)
|
|
282
|
-
WHERE
|
|
260
|
+
WHERE owner.workspace_id = $workspace_id
|
|
283
261
|
-- User Note 5 — mtime-ascending: dormant entries hold the stable prompt-cache prefix; churn clusters at the tail.
|
|
284
262
|
ORDER BY e.updated_at ASC, e.id ASC, ec.name;
|
|
285
263
|
|
|
@@ -292,33 +270,31 @@ SELECT e.scheme AS scheme,
|
|
|
292
270
|
COUNT(DISTINCT e.id) AS entries,
|
|
293
271
|
COUNT(DISTINCT CASE
|
|
294
272
|
WHEN instr(ltrim(e.pathname, '/'), '/') = 0
|
|
295
|
-
THEN 'entry
|
|
296
|
-
ELSE 'scope
|
|
273
|
+
THEN json_array('entry', e.authority, ltrim(e.pathname, '/'))
|
|
274
|
+
ELSE json_array('scope', e.authority, substr(ltrim(e.pathname, '/'), 1, instr(ltrim(e.pathname, '/'), '/')))
|
|
297
275
|
END) AS shallow_items
|
|
298
276
|
FROM entries e
|
|
299
277
|
JOIN entry_channels ec ON ec.entry_id = e.id
|
|
300
|
-
|
|
278
|
+
JOIN workers owner ON owner.id = e.owner_id
|
|
279
|
+
WHERE owner.workspace_id = $workspace_id
|
|
301
280
|
GROUP BY e.scheme
|
|
302
281
|
ORDER BY e.scheme;
|
|
303
282
|
|
|
304
283
|
-- PREP: engine_initialize_ambient_cursor
|
|
305
|
-
--
|
|
306
|
-
--
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
SET ambient_event_cursor = COALESCE((
|
|
310
|
-
SELECT MAX(ae.id) FROM ambient_events ae WHERE ae.workspace_id = $workspace_id
|
|
311
|
-
), 0)
|
|
284
|
+
-- Worker creation owns the baseline, and fork creation owns its inherited
|
|
285
|
+
-- cursor/boundary. Packet assembly merely verifies that durable invariant.
|
|
286
|
+
SELECT ambient_event_cursor
|
|
287
|
+
FROM workers
|
|
312
288
|
WHERE id = $worker_id
|
|
313
|
-
AND workspace_id = $workspace_id
|
|
314
|
-
AND ambient_event_cursor IS NULL
|
|
315
|
-
RETURNING ambient_event_cursor;
|
|
289
|
+
AND workspace_id = $workspace_id;
|
|
316
290
|
|
|
317
291
|
-- PREP: engine_pull_ambient_events
|
|
318
292
|
-- One SQLite snapshot captures both ends of the closed observation window.
|
|
319
293
|
-- The LEFT JOIN returns the boundary even when the window contains no event.
|
|
320
294
|
WITH observation AS (
|
|
321
295
|
SELECT w.ambient_event_cursor AS cursor,
|
|
296
|
+
w.parent_worker_id,
|
|
297
|
+
w.fork_event_boundary,
|
|
322
298
|
COALESCE(
|
|
323
299
|
(SELECT MAX(ae.id) FROM ambient_events ae WHERE ae.workspace_id = $workspace_id),
|
|
324
300
|
w.ambient_event_cursor,
|
|
@@ -329,8 +305,12 @@ WITH observation AS (
|
|
|
329
305
|
)
|
|
330
306
|
SELECT o.cursor, o.boundary,
|
|
331
307
|
ae.id AS event_id, ae.producer_worker_id, producer.name AS producer_worker_name,
|
|
332
|
-
ae.kind, ae.source,
|
|
333
|
-
ae.op, ae.
|
|
308
|
+
ae.kind, ae.source, ae.at,
|
|
309
|
+
ae.op, ae.delimiter, ae.signal,
|
|
310
|
+
ae.scheme, ae.username, ae.password, ae.hostname, ae.port,
|
|
311
|
+
ae.pathname, ae.query, ae.fragment, ae.line_marker,
|
|
312
|
+
ae.tx, ae.mimetype_tx, ae.rx, ae.mimetype_rx,
|
|
313
|
+
ae.state, ae.outcome, ae.attrs, ae.tags,
|
|
334
314
|
ae.status_rx, ae.terminated_by
|
|
335
315
|
FROM observation o
|
|
336
316
|
LEFT JOIN ambient_events ae
|
|
@@ -338,6 +318,15 @@ LEFT JOIN ambient_events ae
|
|
|
338
318
|
AND ae.id > o.cursor
|
|
339
319
|
AND ae.id <= o.boundary
|
|
340
320
|
AND ae.producer_worker_id != $worker_id
|
|
321
|
+
AND (
|
|
322
|
+
ae.target_parent_worker_id = $worker_id
|
|
323
|
+
OR ae.workspace_broadcast = 1
|
|
324
|
+
OR (
|
|
325
|
+
o.fork_event_boundary IS NOT NULL
|
|
326
|
+
AND ae.target_parent_worker_id = o.parent_worker_id
|
|
327
|
+
AND ae.id <= o.fork_event_boundary
|
|
328
|
+
)
|
|
329
|
+
)
|
|
341
330
|
LEFT JOIN workers producer ON producer.id = ae.producer_worker_id
|
|
342
331
|
ORDER BY ae.id;
|
|
343
332
|
|
|
@@ -346,13 +335,17 @@ ORDER BY ae.id;
|
|
|
346
335
|
-- targeted conflict rule makes crash replay idempotent without swallowing any
|
|
347
336
|
-- unrelated sequence, FK, or shape violation.
|
|
348
337
|
INSERT INTO log_entries (
|
|
349
|
-
worker_id, loop_id, turn_id, sequence, origin, source, ambient_event_id,
|
|
350
|
-
op,
|
|
351
|
-
|
|
338
|
+
worker_id, loop_id, turn_id, sequence, at, origin, source, ambient_event_id,
|
|
339
|
+
op, delimiter, signal,
|
|
340
|
+
scheme, username, password, hostname, port, pathname, query, fragment,
|
|
341
|
+
lineMarker, tx, mimetype_tx,
|
|
342
|
+
rx, mimetype_rx, status_rx, weight, state, outcome, folded, attrs
|
|
352
343
|
) VALUES (
|
|
353
|
-
$worker_id, $loop_id, $turn_id, $sequence, '
|
|
354
|
-
$op, $
|
|
355
|
-
$
|
|
344
|
+
$worker_id, $loop_id, $turn_id, $sequence, $at, '_plurnk', $source, $event_id,
|
|
345
|
+
$op, $delimiter, $signal,
|
|
346
|
+
$scheme, $username, $password, $hostname, $port, $pathname, $query, $fragment,
|
|
347
|
+
$line_marker, $tx, $mimetype_tx,
|
|
348
|
+
$rx, $mimetype_rx, $status, $weight, $state, $outcome, $folded, $attrs
|
|
356
349
|
)
|
|
357
350
|
ON CONFLICT(worker_id, ambient_event_id) WHERE ambient_event_id IS NOT NULL DO NOTHING
|
|
358
351
|
RETURNING id;
|
|
@@ -374,58 +367,59 @@ WHERE id = $worker_id
|
|
|
374
367
|
RETURNING ambient_event_cursor;
|
|
375
368
|
|
|
376
369
|
-- PREP: engine_worker_stream_channels
|
|
377
|
-
-- {§exec-stream} — every stream channel the worker
|
|
378
|
-
--
|
|
379
|
-
|
|
380
|
-
|
|
370
|
+
-- {§exec-stream} — every not-yet-terminally-published stream channel the worker
|
|
371
|
+
-- owns, with its durable per-subscription cursor. Log curation never rewinds it.
|
|
372
|
+
SELECT s.id AS subscription_id, sp.id AS publication_id,
|
|
373
|
+
sp.published_end, sp.terminal_published,
|
|
374
|
+
e.scheme AS runtime, e.authority, e.pathname AS coord,
|
|
381
375
|
ec.name AS channel, ec.content AS content, ec.mimetype AS mimetype,
|
|
382
|
-
ec.state AS state,
|
|
383
|
-
s.
|
|
376
|
+
ec.state AS state, ec.producer_result AS producer_result,
|
|
377
|
+
s.published_channel AS published_channel
|
|
384
378
|
FROM subscriptions s
|
|
385
379
|
JOIN entries e ON e.id = s.entry_id
|
|
386
|
-
JOIN
|
|
380
|
+
JOIN subscription_publications sp ON sp.subscription_id = s.id
|
|
381
|
+
JOIN entry_channels ec ON ec.entry_id = s.entry_id AND ec.name = sp.channel
|
|
387
382
|
WHERE s.worker_id = $worker_id
|
|
388
|
-
AND
|
|
383
|
+
AND sp.terminal_published = 0
|
|
389
384
|
ORDER BY s.id, ec.name;
|
|
390
385
|
|
|
391
|
-
-- PREP: engine_stream_cursor
|
|
392
|
-
-- {§exec-stream} — content offset already shown to the worker: the streamEnd recorded on its latest
|
|
393
|
-
-- foisted observation (the caller defaults to 0 when none exists yet).
|
|
394
|
-
SELECT attrs
|
|
395
|
-
FROM log_entries
|
|
396
|
-
WHERE worker_id = $worker_id AND origin = 'plurnk' AND op = 'READ'
|
|
397
|
-
AND scheme = $scheme AND pathname = $pathname AND fragment IS $fragment
|
|
398
|
-
ORDER BY id DESC LIMIT 1;
|
|
399
|
-
|
|
400
386
|
-- PREP: engine_insert_stream_delta
|
|
401
387
|
-- {§exec-stream} / {§env-delta} — materialize a channel's next publishable content as a
|
|
402
|
-
-- foisted READ row (the model READs the stream it never typed). origin=
|
|
403
|
-
-- the channel; attrs.streamEnd is the next turn's cursor;
|
|
404
|
-
--
|
|
388
|
+
-- foisted READ row (the model READs the stream it never typed). origin=_plurnk; fragment is
|
|
389
|
+
-- the channel; attrs.streamEnd is the next turn's cursor; terminal observations
|
|
390
|
+
-- are born open and ongoing observations wholly folded. {§exec-stream}
|
|
405
391
|
INSERT INTO log_entries (
|
|
406
392
|
worker_id, loop_id, turn_id, sequence, origin, source, model_call_id,
|
|
407
|
-
|
|
393
|
+
subscription_publication_id,
|
|
394
|
+
op, scheme, hostname, port, pathname, fragment, tx, mimetype_tx, rx, mimetype_rx, status_rx, weight, attrs, folded
|
|
408
395
|
) VALUES (
|
|
409
|
-
$worker_id, $loop_id, $turn_id, $sequence, '
|
|
410
|
-
|
|
396
|
+
$worker_id, $loop_id, $turn_id, $sequence, '_plurnk', NULL, NULL,
|
|
397
|
+
$subscription_publication_id,
|
|
398
|
+
'READ', $scheme, $hostname, $port, $pathname, $fragment, '', 'text/plain', $rx, 'application/json', $status, $weight, $attrs, $folded
|
|
411
399
|
);
|
|
412
400
|
|
|
413
401
|
-- PREP: engine_child_workers_live
|
|
414
|
-
-- The worker's LIVE child workers —
|
|
402
|
+
-- The worker's LIVE child workers — any loop non-terminal (100 pending / 102 processing / 202 parked).
|
|
415
403
|
-- Powers the Active Child Workers orienting section ({§child-orientation}): terse `* <status> worker://<name>`
|
|
416
404
|
-- pointers so the model SEES what it holds live and reasons for itself (READ/KILL), never told to.
|
|
417
405
|
-- Empty → section omitted.
|
|
418
|
-
SELECT r.name,
|
|
406
|
+
SELECT r.name,
|
|
407
|
+
CASE
|
|
408
|
+
WHEN SUM(CASE WHEN l.status = 102 THEN 1 ELSE 0 END) > 0 THEN 102
|
|
409
|
+
WHEN SUM(CASE WHEN l.status = 202 THEN 1 ELSE 0 END) > 0 THEN 202
|
|
410
|
+
ELSE 100
|
|
411
|
+
END AS status
|
|
419
412
|
FROM workers r
|
|
420
|
-
JOIN loops l ON l.
|
|
413
|
+
JOIN loops l ON l.worker_id = r.id AND l.status IN (100, 102, 202)
|
|
421
414
|
WHERE r.parent_worker_id = $worker_id AND l.status IN (100, 102, 202)
|
|
415
|
+
GROUP BY r.id, r.name
|
|
422
416
|
ORDER BY r.name;
|
|
423
417
|
|
|
424
418
|
-- PREP: engine_child_streams_open
|
|
425
419
|
-- The worker's OPEN streams (subscriptions not yet closed) — their addressable coord. Powers the Child
|
|
426
420
|
-- Streams orienting section ({§child-orientation}): terse `* active <runtime>:///<coord>` pointers the
|
|
427
421
|
-- model OPENs/READs/KILLs. Empty → section omitted.
|
|
428
|
-
SELECT s.scheme, e.pathname
|
|
422
|
+
SELECT s.scheme, e.authority, e.pathname
|
|
429
423
|
FROM subscriptions s
|
|
430
424
|
JOIN entries e ON e.id = s.entry_id
|
|
431
425
|
WHERE s.worker_id = $worker_id AND s.closed_at IS NULL
|
|
@@ -434,10 +428,22 @@ ORDER BY e.pathname;
|
|
|
434
428
|
-- PREP: engine_render_errors
|
|
435
429
|
-- SPEC {§operation-results}: 4xx/5xx log rows are indexed in the packet's errors as
|
|
436
430
|
-- LogCoordinate pointers, forcing the model to confront failures instead of letting
|
|
437
|
-
-- them rot in log:///. Window = the current turn AND the immediately
|
|
438
|
-
--
|
|
439
|
-
-- current-turn so a pre-generate engine error surfaces THIS turn
|
|
431
|
+
-- them rot in log:///. Window = the current would-be model turn AND the immediately
|
|
432
|
+
-- preceding completed model turn: prior-model-turn for action failures the
|
|
433
|
+
-- model just caused, current-turn so a pre-generate engine error surfaces THIS turn
|
|
434
|
+
-- rather than a turn late. Packetless chronology never hides a model failure.
|
|
440
435
|
-- {§operation-result-uniform-error-channel}
|
|
436
|
+
WITH previous_model_turn AS (
|
|
437
|
+
SELECT id
|
|
438
|
+
FROM turns
|
|
439
|
+
WHERE loop_id = $loop_id
|
|
440
|
+
AND sequence < $current_turn_seq
|
|
441
|
+
AND producer = 'model'
|
|
442
|
+
AND kind = 'inference'
|
|
443
|
+
AND completed_at IS NOT NULL
|
|
444
|
+
ORDER BY sequence DESC
|
|
445
|
+
LIMIT 1
|
|
446
|
+
)
|
|
441
447
|
SELECT
|
|
442
448
|
le.origin, le.op, le.attrs, le.sequence, le.status_rx, le.rx, le.mimetype_rx,
|
|
443
449
|
le.scheme, le.pathname,
|
|
@@ -449,57 +455,68 @@ WHERE le.loop_id = $loop_id
|
|
|
449
455
|
AND le.status_rx >= 400
|
|
450
456
|
-- {§log-row-self-explains}: every >=400 row points at ITSELF — the op row carries its failure
|
|
451
457
|
-- message on its meta line (packet-wire), so the pointer leads to a record that states its why.
|
|
452
|
-
AND
|
|
458
|
+
AND (
|
|
459
|
+
t.sequence = $current_turn_seq
|
|
460
|
+
OR t.id = (SELECT id FROM previous_model_turn)
|
|
461
|
+
)
|
|
453
462
|
ORDER BY t.sequence, le.sequence;
|
|
454
463
|
|
|
455
|
-
--
|
|
456
|
-
-- {§
|
|
457
|
-
--
|
|
458
|
-
--
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
464
|
+
-- PREP: overflow_turn_causal_rows
|
|
465
|
+
-- {§overflow-turn-curation} — one deterministic causal set: rows already in
|
|
466
|
+
-- the packetless candidate, rows from the worker's immediately preceding turn,
|
|
467
|
+
-- and older bodies that preceding turn actually made more visible.
|
|
468
|
+
WITH current_turn AS (
|
|
469
|
+
SELECT turn.id, turn.sequence AS turn_seq,
|
|
470
|
+
loop.id AS loop_id, loop.sequence AS loop_seq, loop.worker_id
|
|
471
|
+
FROM turns turn
|
|
472
|
+
JOIN loops loop ON loop.id = turn.loop_id
|
|
473
|
+
WHERE turn.id = $turn_id AND loop.id = $loop_id
|
|
474
|
+
),
|
|
475
|
+
previous_turn AS (
|
|
476
|
+
SELECT prior.id
|
|
477
|
+
FROM turns prior
|
|
478
|
+
JOIN loops prior_loop ON prior_loop.id = prior.loop_id
|
|
479
|
+
JOIN current_turn current ON current.worker_id = prior_loop.worker_id
|
|
480
|
+
WHERE prior.completed_at IS NOT NULL
|
|
481
|
+
AND (
|
|
482
|
+
prior_loop.sequence < current.loop_seq
|
|
483
|
+
OR (
|
|
484
|
+
prior_loop.sequence = current.loop_seq
|
|
485
|
+
AND prior.sequence < current.turn_seq
|
|
486
|
+
)
|
|
487
|
+
)
|
|
488
|
+
ORDER BY prior_loop.sequence DESC, prior.sequence DESC
|
|
489
|
+
LIMIT 1
|
|
490
|
+
),
|
|
491
|
+
causal_rows(id) AS (
|
|
492
|
+
SELECT row.id
|
|
493
|
+
FROM log_entries row
|
|
494
|
+
WHERE row.turn_id = $turn_id
|
|
495
|
+
OR row.turn_id = (SELECT id FROM previous_turn)
|
|
496
|
+
UNION
|
|
497
|
+
SELECT effect.target_log_entry_id
|
|
498
|
+
FROM log_curation_effects effect
|
|
499
|
+
JOIN log_entries operation ON operation.id = effect.operation_log_entry_id
|
|
500
|
+
WHERE operation.turn_id = (SELECT id FROM previous_turn)
|
|
501
|
+
AND operation.op = 'OPEN'
|
|
502
|
+
AND operation.status_rx < 400
|
|
503
|
+
AND effect.folded_before != effect.folded_after
|
|
469
504
|
)
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
FROM log_curation_effects effect
|
|
481
|
-
JOIN log_entries operation ON operation.id = effect.operation_log_entry_id
|
|
482
|
-
JOIN log_entries target ON target.id = effect.target_log_entry_id
|
|
483
|
-
WHERE operation.turn_id = (SELECT id FROM previous_turn)
|
|
484
|
-
AND operation.op = 'OPEN'
|
|
485
|
-
AND operation.status_rx < 400
|
|
486
|
-
AND effect.expanded_before = 0
|
|
487
|
-
AND target.expanded = 1
|
|
488
|
-
AND COALESCE(target.op, '') NOT IN ('error', 'PLAN')
|
|
489
|
-
AND COALESCE(target.scheme, '') != 'prompt';
|
|
490
|
-
|
|
491
|
-
UPDATE log_entries SET expanded = 0
|
|
492
|
-
WHERE id IN (SELECT id FROM engine_grinder_fold_set);
|
|
493
|
-
|
|
494
|
-
INSERT OR IGNORE INTO log_tags (log_entry_id, tag)
|
|
495
|
-
SELECT id, 'overflow' FROM engine_grinder_fold_set;
|
|
496
|
-
|
|
497
|
-
DELETE FROM engine_grinder_fold_set;
|
|
505
|
+
SELECT row.id,
|
|
506
|
+
(loop.sequence || '/' || turn.sequence || '/' || row.sequence) AS coordinate,
|
|
507
|
+
row.origin, row.op, row.attrs,
|
|
508
|
+
row.tx, row.mimetype_tx, row.rx, row.mimetype_rx,
|
|
509
|
+
row.folded
|
|
510
|
+
FROM causal_rows causal
|
|
511
|
+
JOIN log_entries row ON row.id = causal.id
|
|
512
|
+
JOIN turns turn ON turn.id = row.turn_id
|
|
513
|
+
JOIN loops loop ON loop.id = row.loop_id
|
|
514
|
+
ORDER BY loop.sequence, turn.sequence, row.sequence;
|
|
498
515
|
|
|
499
516
|
-- PREP: engine_fold_log_entry
|
|
500
517
|
-- Fold one known log row by id. Model-emission rows use this after insertion so
|
|
501
518
|
-- the complete admitted emission remains available without opening by default.
|
|
502
|
-
UPDATE log_entries SET
|
|
519
|
+
UPDATE log_entries SET folded = '[[1,-1]]' WHERE id = $id;
|
|
503
520
|
|
|
504
521
|
-- PREP: engine_render_log
|
|
505
522
|
-- Render-time log-section assembly ({§body-projection}).
|
|
@@ -507,8 +524,8 @@ UPDATE log_entries SET expanded = 0 WHERE id = $id;
|
|
|
507
524
|
-- memory carries across loops within a worker, not just the
|
|
508
525
|
-- current loop. Coordinates append /<op> only for rows that represent an operation.
|
|
509
526
|
-- Status 202 entries in state='proposed' are model-invisible until resolved.
|
|
510
|
-
--
|
|
511
|
-
--
|
|
527
|
+
-- Folded intervals are projected against the canonical body by packet-wire;
|
|
528
|
+
-- wholly folded rows remain listed and re-OPENable. {§open-fold}
|
|
512
529
|
SELECT
|
|
513
530
|
le.id,
|
|
514
531
|
l.sequence AS loop_seq,
|
|
@@ -516,13 +533,13 @@ SELECT
|
|
|
516
533
|
le.sequence,
|
|
517
534
|
-- le.origin is attribution, never a render filter; the worker's actor — {§actor-boundary-origin-not-filter} {§machine-processes-worker-origin}
|
|
518
535
|
le.origin,
|
|
519
|
-
le.op, le.
|
|
536
|
+
le.op, le.delimiter, le.signal,
|
|
520
537
|
le.scheme, le.username, le.password,
|
|
521
538
|
le.hostname, le.port, le.pathname,
|
|
522
539
|
le.query, le.fragment,
|
|
523
540
|
le.status_rx, le.rx, le.mimetype_rx,
|
|
524
541
|
le.tx, le.mimetype_tx,
|
|
525
|
-
le.state, le.outcome, le.
|
|
542
|
+
le.state, le.outcome, le.folded, le.source, le.weight, le.attrs,
|
|
526
543
|
COALESCE((
|
|
527
544
|
SELECT json_group_array(ordered.tag)
|
|
528
545
|
FROM (
|
|
@@ -540,8 +557,21 @@ JOIN loops l ON l.id = le.loop_id
|
|
|
540
557
|
-- {§operation-result-uniform-error-channel}.
|
|
541
558
|
WHERE le.worker_id = $worker_id
|
|
542
559
|
AND NOT (le.status_rx = 202 AND le.state = 'proposed')
|
|
543
|
-
AND NOT (
|
|
544
|
-
|
|
560
|
+
AND NOT (
|
|
561
|
+
COALESCE(le.op, '') IN ('OPEN', 'FOLD')
|
|
562
|
+
AND le.status_rx < 400
|
|
563
|
+
AND le.source IS NULL
|
|
564
|
+
)
|
|
565
|
+
AND NOT (COALESCE(le.op, '') = 'KILL' AND le.scheme = 'log' AND le.status_rx < 400 AND le.source IS NULL)
|
|
566
|
+
-- Successful maintenance-turn rows (doc reconciliation) never render: a
|
|
567
|
+
-- receipt answers an asker and these turns have none. Rows stay durable and
|
|
568
|
+
-- READ-able; failures remain visible ({§operation-result-uniform-error-channel}).
|
|
569
|
+
AND NOT (
|
|
570
|
+
t.producer = '_plurnk'
|
|
571
|
+
AND t.kind = 'maintenance'
|
|
572
|
+
AND COALESCE(le.status_rx, 200) < 400
|
|
573
|
+
AND le.source IS NULL
|
|
574
|
+
)
|
|
545
575
|
ORDER BY l.sequence, t.sequence, le.sequence;
|
|
546
576
|
|
|
547
577
|
-- PREP: engine_insert_log_entry
|
|
@@ -551,14 +581,14 @@ ORDER BY l.sequence, t.sequence, le.sequence;
|
|
|
551
581
|
-- via proposal resolution; entry transitions through engine_resolve_log_entry).
|
|
552
582
|
INSERT INTO log_entries (
|
|
553
583
|
worker_id, loop_id, turn_id, sequence, origin, source, model_call_id,
|
|
554
|
-
op,
|
|
584
|
+
op, delimiter, signal,
|
|
555
585
|
scheme, username, password, hostname, port,
|
|
556
586
|
pathname, query, fragment, lineMarker,
|
|
557
587
|
tx, mimetype_tx, rx, mimetype_rx, status_rx, weight,
|
|
558
588
|
state, outcome, attrs
|
|
559
589
|
) VALUES (
|
|
560
590
|
$worker_id, $loop_id, $turn_id, $sequence, $origin, $source, $model_call_id,
|
|
561
|
-
$op, $
|
|
591
|
+
$op, $delimiter, $signal,
|
|
562
592
|
$scheme, $username, $password, $hostname, $port,
|
|
563
593
|
$pathname, $query, $fragment, $lineMarker,
|
|
564
594
|
$tx, $mimetype_tx, $rx, $mimetype_rx, $status_rx, $weight,
|
|
@@ -610,25 +640,18 @@ WHERE turn_id = $turn_id
|
|
|
610
640
|
-- PREP: engine_worker_has_undelivered_stream_term
|
|
611
641
|
-- A stream may finish between its EXEC and a same-turn SEND. It is then no longer
|
|
612
642
|
-- live, but its terminal outcome has not crossed the pre-turn observation boundary:
|
|
613
|
-
--
|
|
614
|
-
-- retrieval or child termination so an empty
|
|
643
|
+
-- one or more selected channel publication rows remain nonterminal. Treat that
|
|
644
|
+
-- closed result like a same-turn retrieval or child termination so an empty
|
|
645
|
+
-- join cannot conclude over unseen work.
|
|
615
646
|
-- Completion is information independently of payload: an empty success and especially
|
|
616
647
|
-- an empty failure must receive the same terminal observation as a non-empty stream.
|
|
617
|
-
SELECT
|
|
648
|
+
SELECT DISTINCT s.handle AS handle
|
|
618
649
|
FROM subscriptions s
|
|
619
|
-
JOIN
|
|
650
|
+
JOIN subscription_publications sp ON sp.subscription_id = s.id
|
|
620
651
|
WHERE s.worker_id = $worker_id
|
|
621
652
|
AND s.closed_at IS NOT NULL
|
|
622
|
-
AND
|
|
623
|
-
|
|
624
|
-
WHERE le.worker_id = $worker_id
|
|
625
|
-
AND le.origin = 'plurnk'
|
|
626
|
-
AND le.op = 'READ'
|
|
627
|
-
AND le.scheme = e.scheme
|
|
628
|
-
AND le.pathname = e.pathname
|
|
629
|
-
AND json_extract(le.attrs, '$.terminal') = 1
|
|
630
|
-
)
|
|
631
|
-
LIMIT 1;
|
|
653
|
+
AND sp.terminal_published = 0
|
|
654
|
+
LIMIT 8;
|
|
632
655
|
|
|
633
656
|
-- PREP: engine_turn_failures
|
|
634
657
|
-- {§send-premature-terminate} — THIS turn's failed op results (the model's own ops, status >= 400), whose
|
|
@@ -646,20 +669,23 @@ WHERE turn_id = $turn_id
|
|
|
646
669
|
AND status_rx >= 400
|
|
647
670
|
AND (op != 'error' OR source = 'grammar');
|
|
648
671
|
|
|
649
|
-
-- PREP: engine_reconcile_turn_status
|
|
650
|
-
-- A SEND's signal is only provisional until dispatch adjudicates live obligations and failures.
|
|
651
|
-
-- The close writes packet+usage before ops dispatch, so reconcile the persisted turn whenever
|
|
652
|
-
-- dispatch changes that disposition (for example refused 200 -> 102 or drained 202 -> 200).
|
|
653
|
-
UPDATE turns SET status = $status WHERE id = $id;
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
672
|
-- PREP: engine_loop_sequence
|
|
658
673
|
-- The loop's per-worker sequence — the model-facing coordinate (prompt/<worker>/<loop-seq>/<turn-seq>,
|
|
659
674
|
-- matching the log's loop-relative numbering). The raw db id leaked into prompt paths and the
|
|
660
675
|
-- model's first loop read as prompt/2/1 (the docs loop holds id 1). Owner: minor but annoying.
|
|
661
676
|
SELECT sequence FROM loops WHERE id = $loop_id;
|
|
662
677
|
|
|
678
|
+
-- PREP: engine_worker_has_inference_history
|
|
679
|
+
-- Administrative turns may legitimately precede the first provider exchange.
|
|
680
|
+
-- Initialization is therefore keyed to inference history, never loop ordinals.
|
|
681
|
+
SELECT EXISTS (
|
|
682
|
+
SELECT 1
|
|
683
|
+
FROM turns t
|
|
684
|
+
JOIN loops l ON l.id = t.loop_id
|
|
685
|
+
WHERE l.worker_id = $worker_id
|
|
686
|
+
AND (t.producer = 'model' OR t.kind = 'initialization')
|
|
687
|
+
) AS present;
|
|
688
|
+
|
|
663
689
|
-- PREP: engine_worker_lineage_root
|
|
664
690
|
-- The no-parent root of a worker lineage; a root worker returns itself.
|
|
665
691
|
-- {§worker-primary}
|
|
@@ -692,10 +718,9 @@ WHERE current.id = $worker_id;
|
|
|
692
718
|
-- not a second timestamp race. {§send-undelivered-child-term}
|
|
693
719
|
SELECT 1 AS pending
|
|
694
720
|
FROM ambient_events ae
|
|
695
|
-
JOIN workers child ON child.id = ae.producer_worker_id
|
|
696
721
|
JOIN workers parent ON parent.id = $worker_id
|
|
697
722
|
WHERE ae.workspace_id = parent.workspace_id
|
|
698
723
|
AND ae.kind = 'loop_termination'
|
|
699
|
-
AND
|
|
724
|
+
AND ae.target_parent_worker_id = parent.id
|
|
700
725
|
AND ae.id > COALESCE(parent.ambient_event_cursor, 0)
|
|
701
726
|
LIMIT 1;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type ParsedPath } from "@plurnk/plurnk-contracts";
|
|
2
|
+
import { type SchemeAddressCtx, type SchemeHandler, type SchemeResult } from "@plurnk/plurnk-schemes";
|
|
3
|
+
import type { Db } from "./Db.ts";
|
|
4
|
+
import type { PlurnkSchemeContext, SchemeManifest } from "./scheme-types.ts";
|
|
5
|
+
export interface BoundEntryAddress {
|
|
6
|
+
readonly ownerId: number;
|
|
7
|
+
readonly scheme: string;
|
|
8
|
+
readonly authority: string;
|
|
9
|
+
readonly pathname: string;
|
|
10
|
+
}
|
|
11
|
+
export interface EntryAddressResolution {
|
|
12
|
+
readonly address: BoundEntryAddress | null;
|
|
13
|
+
readonly result: SchemeResult | null;
|
|
14
|
+
}
|
|
15
|
+
type AddressResolver = Pick<SchemeHandler, "resolveEntryAddress">;
|
|
16
|
+
export default class EntryAddressBinding {
|
|
17
|
+
#private;
|
|
18
|
+
constructor(db: Db);
|
|
19
|
+
static addressContext(ctx: PlurnkSchemeContext): SchemeAddressCtx;
|
|
20
|
+
fixedOwnerId(manifest: SchemeManifest, ctx: PlurnkSchemeContext): Promise<number | null>;
|
|
21
|
+
resolve({ target, routedScheme, handler, manifest, ctx, }: {
|
|
22
|
+
target: ParsedPath;
|
|
23
|
+
routedScheme: string;
|
|
24
|
+
handler: AddressResolver;
|
|
25
|
+
manifest: SchemeManifest & {
|
|
26
|
+
readonly category: "data";
|
|
27
|
+
};
|
|
28
|
+
ctx: PlurnkSchemeContext;
|
|
29
|
+
}): Promise<EntryAddressResolution>;
|
|
30
|
+
}
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=EntryAddressBinding.d.ts.map
|