@plurnk/plurnk-service 1.3.12 → 1.4.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 +84 -77
- package/INSTALL.md +50 -25
- package/README.md +24 -10
- package/SPEC.md +2311 -928
- package/dist/Paths.d.ts +4 -1
- package/dist/Paths.d.ts.map +1 -1
- package/dist/Paths.js +23 -21
- package/dist/Paths.js.map +1 -1
- package/dist/build-info.json +1 -1
- package/dist/content/edit-receipt.d.ts +13 -28
- package/dist/content/edit-receipt.d.ts.map +1 -1
- package/dist/content/edit-receipt.js +285 -104
- package/dist/content/edit-receipt.js.map +1 -1
- package/dist/content/edited-span.d.ts.map +1 -1
- package/dist/content/edited-span.js +2 -5
- package/dist/content/edited-span.js.map +1 -1
- package/dist/content/index.d.ts +3 -3
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/index.js +1 -1
- package/dist/content/index.js.map +1 -1
- package/dist/content/line-marker.d.ts +6 -9
- package/dist/content/line-marker.d.ts.map +1 -1
- package/dist/content/line-marker.js +7 -11
- package/dist/content/line-marker.js.map +1 -1
- package/dist/content/matcher.d.ts +14 -25
- package/dist/content/matcher.d.ts.map +1 -1
- package/dist/content/matcher.js +77 -107
- package/dist/content/matcher.js.map +1 -1
- package/dist/content/mimetype-binary.d.ts +2 -2
- package/dist/content/mimetype-binary.d.ts.map +1 -1
- package/dist/content/mimetype-binary.js +10 -10
- package/dist/content/mimetype-binary.js.map +1 -1
- package/dist/content/path-mimetype.js +3 -3
- package/dist/content/path-mimetype.js.map +1 -1
- package/dist/content/read-resolve.d.ts +8 -4
- package/dist/content/read-resolve.d.ts.map +1 -1
- package/dist/content/read-resolve.js +101 -49
- package/dist/content/read-resolve.js.map +1 -1
- package/dist/core/BranchReceipt.d.ts +7 -0
- package/dist/core/BranchReceipt.d.ts.map +1 -0
- package/dist/core/BranchReceipt.js +27 -0
- package/dist/core/BranchReceipt.js.map +1 -0
- package/dist/core/BudgetOverflow.d.ts +23 -0
- package/dist/core/BudgetOverflow.d.ts.map +1 -0
- package/dist/core/BudgetOverflow.js +61 -0
- package/dist/core/BudgetOverflow.js.map +1 -0
- package/dist/core/BudgetReadout.d.ts +8 -0
- package/dist/core/BudgetReadout.d.ts.map +1 -0
- package/dist/core/BudgetReadout.js +79 -0
- package/dist/core/BudgetReadout.js.map +1 -0
- package/dist/core/ChannelWrite.d.ts +28 -9
- package/dist/core/ChannelWrite.d.ts.map +1 -1
- package/dist/core/ChannelWrite.js +28 -21
- package/dist/core/ChannelWrite.js.map +1 -1
- package/dist/core/ChannelWrite.sql +11 -10
- package/dist/core/CoreSchemeServices.d.ts +10 -4
- package/dist/core/CoreSchemeServices.d.ts.map +1 -1
- package/dist/core/CoreSchemeServices.js +7 -1
- package/dist/core/CoreSchemeServices.js.map +1 -1
- package/dist/core/Dispatcher.d.ts +29 -20
- package/dist/core/Dispatcher.d.ts.map +1 -1
- package/dist/core/Dispatcher.js +1488 -599
- package/dist/core/Dispatcher.js.map +1 -1
- package/dist/core/DurableStatement.d.ts +6 -0
- package/dist/core/DurableStatement.d.ts.map +1 -0
- package/dist/core/DurableStatement.js +51 -0
- package/dist/core/DurableStatement.js.map +1 -0
- package/dist/core/Engine.d.ts +48 -20
- package/dist/core/Engine.d.ts.map +1 -1
- package/dist/core/Engine.js +1208 -789
- package/dist/core/Engine.js.map +1 -1
- package/dist/core/Engine.sql +309 -217
- package/dist/core/EnvFlags.js +1 -1
- package/dist/core/EnvFlags.js.map +1 -1
- package/dist/core/ErrorDetail.d.ts +6 -0
- package/dist/core/ErrorDetail.d.ts.map +1 -0
- package/dist/core/ErrorDetail.js +20 -0
- package/dist/core/ErrorDetail.js.map +1 -0
- package/dist/core/ExecutorRegistry.d.ts +14 -3
- package/dist/core/ExecutorRegistry.d.ts.map +1 -1
- package/dist/core/ExecutorRegistry.js +56 -30
- package/dist/core/ExecutorRegistry.js.map +1 -1
- package/dist/core/GitBranch.d.ts +20 -0
- package/dist/core/GitBranch.d.ts.map +1 -0
- package/dist/core/GitBranch.js +110 -0
- package/dist/core/GitBranch.js.map +1 -0
- package/dist/core/JournalTurn.d.ts +9 -0
- package/dist/core/JournalTurn.d.ts.map +1 -0
- package/dist/core/JournalTurn.js +14 -0
- package/dist/core/JournalTurn.js.map +1 -0
- package/dist/core/JournalTurn.sql +10 -0
- package/dist/core/LogBody.d.ts +17 -0
- package/dist/core/LogBody.d.ts.map +1 -0
- package/dist/core/LogBody.js +148 -0
- package/dist/core/LogBody.js.map +1 -0
- package/dist/core/LoopFlagsReader.d.ts +7 -0
- package/dist/core/LoopFlagsReader.d.ts.map +1 -0
- package/dist/core/LoopFlagsReader.js +33 -0
- package/dist/core/LoopFlagsReader.js.map +1 -0
- package/dist/core/LoopLifecycle.d.ts +8 -1
- package/dist/core/LoopLifecycle.d.ts.map +1 -1
- package/dist/core/LoopLifecycle.js +55 -9
- package/dist/core/LoopLifecycle.js.map +1 -1
- package/dist/core/LoopLifecycle.sql +9 -3
- package/dist/core/NoticeChannel.d.ts +13 -0
- package/dist/core/NoticeChannel.d.ts.map +1 -0
- package/dist/core/NoticeChannel.js +40 -0
- package/dist/core/NoticeChannel.js.map +1 -0
- package/dist/core/Owner.d.ts +0 -1
- package/dist/core/Owner.d.ts.map +1 -1
- package/dist/core/Owner.js +2 -5
- package/dist/core/Owner.js.map +1 -1
- package/dist/core/PacketBuilder.d.ts +25 -24
- package/dist/core/PacketBuilder.d.ts.map +1 -1
- package/dist/core/PacketBuilder.js +313 -375
- package/dist/core/PacketBuilder.js.map +1 -1
- package/dist/core/ProblemLog.d.ts +26 -0
- package/dist/core/ProblemLog.d.ts.map +1 -0
- package/dist/core/ProblemLog.js +58 -0
- package/dist/core/ProblemLog.js.map +1 -0
- package/dist/core/ProposalLifecycle.d.ts +15 -21
- package/dist/core/ProposalLifecycle.d.ts.map +1 -1
- package/dist/core/ProposalLifecycle.js +291 -78
- package/dist/core/ProposalLifecycle.js.map +1 -1
- package/dist/core/ProviderInstantiate.d.ts.map +1 -1
- package/dist/core/ProviderInstantiate.js +51 -48
- package/dist/core/ProviderInstantiate.js.map +1 -1
- package/dist/core/SchemeRegistry.d.ts +14 -8
- package/dist/core/SchemeRegistry.d.ts.map +1 -1
- package/dist/core/SchemeRegistry.js +189 -114
- package/dist/core/SchemeRegistry.js.map +1 -1
- package/dist/core/ServiceTeardown.d.ts +11 -0
- package/dist/core/ServiceTeardown.d.ts.map +1 -0
- package/dist/core/ServiceTeardown.js +70 -0
- package/dist/core/ServiceTeardown.js.map +1 -0
- package/dist/core/StoredPacket.d.ts +29 -0
- package/dist/core/StoredPacket.d.ts.map +1 -0
- package/dist/core/StoredPacket.js +147 -0
- package/dist/core/StoredPacket.js.map +1 -0
- package/dist/core/StrikeRail.d.ts +1 -2
- package/dist/core/StrikeRail.d.ts.map +1 -1
- package/dist/core/StrikeRail.js +25 -55
- package/dist/core/StrikeRail.js.map +1 -1
- package/dist/core/WorkerControlAddress.d.ts +17 -0
- package/dist/core/WorkerControlAddress.d.ts.map +1 -0
- package/dist/core/WorkerControlAddress.js +44 -0
- package/dist/core/WorkerControlAddress.js.map +1 -0
- package/dist/core/WorkerName.d.ts +31 -0
- package/dist/core/WorkerName.d.ts.map +1 -0
- package/dist/core/WorkerName.js +95 -0
- package/dist/core/WorkerName.js.map +1 -0
- package/dist/core/WorkerName.sql +36 -0
- package/dist/core/WorkspaceGate.d.ts +14 -0
- package/dist/core/WorkspaceGate.d.ts.map +1 -0
- package/dist/core/WorkspaceGate.js +155 -0
- package/dist/core/WorkspaceGate.js.map +1 -0
- package/dist/core/caps/CapsResolve.d.ts +1 -1
- package/dist/core/caps/CapsResolve.d.ts.map +1 -1
- package/dist/core/caps/CapsResolve.js.map +1 -1
- package/dist/core/caps/DbChannelCaps.d.ts +5 -11
- package/dist/core/caps/DbChannelCaps.d.ts.map +1 -1
- package/dist/core/caps/DbChannelCaps.js +24 -8
- package/dist/core/caps/DbChannelCaps.js.map +1 -1
- package/dist/core/caps/DbEntryCaps.d.ts +4 -13
- package/dist/core/caps/DbEntryCaps.d.ts.map +1 -1
- package/dist/core/caps/DbEntryCaps.js +15 -6
- 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 +12 -11
- package/dist/core/caps/DbNotifyCaps.js.map +1 -1
- package/dist/core/caps/DbProjectionCaps.d.ts +5 -5
- package/dist/core/caps/DbProjectionCaps.d.ts.map +1 -1
- package/dist/core/caps/DbProjectionCaps.js +21 -4
- package/dist/core/caps/DbProjectionCaps.js.map +1 -1
- package/dist/core/caps/DbSubscriptionCaps.d.ts +4 -4
- package/dist/core/caps/DbSubscriptionCaps.d.ts.map +1 -1
- package/dist/core/caps/DbSubscriptionCaps.js +57 -62
- package/dist/core/caps/DbSubscriptionCaps.js.map +1 -1
- package/dist/core/caps/DbTagCaps.d.ts +5 -12
- package/dist/core/caps/DbTagCaps.d.ts.map +1 -1
- package/dist/core/caps/DbTagCaps.js +14 -7
- package/dist/core/caps/DbTagCaps.js.map +1 -1
- package/dist/core/content-hash.js +1 -1
- package/dist/core/content-hash.js.map +1 -1
- package/dist/core/env-defaults.d.ts.map +1 -1
- package/dist/core/env-defaults.js.map +1 -1
- package/dist/core/fork.d.ts.map +1 -1
- package/dist/core/fork.js +55 -30
- package/dist/core/fork.js.map +1 -1
- package/dist/core/fork.sql +41 -27
- package/dist/core/git-env.d.ts +2 -0
- package/dist/core/git-env.d.ts.map +1 -1
- package/dist/core/git-env.js +13 -18
- package/dist/core/git-env.js.map +1 -1
- package/dist/core/git-iso.d.ts.map +1 -1
- package/dist/core/git-iso.js +9 -15
- package/dist/core/git-iso.js.map +1 -1
- package/dist/core/git-membership.d.ts +1 -1
- package/dist/core/git-membership.d.ts.map +1 -1
- package/dist/core/git-membership.js +198 -146
- 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 +10 -11
- package/dist/core/git-state.js.map +1 -1
- package/dist/core/owner.sql +1 -1
- package/dist/core/packet-inject.d.ts.map +1 -1
- package/dist/core/packet-inject.js +7 -11
- package/dist/core/packet-inject.js.map +1 -1
- package/dist/core/packet-wire.d.ts +2 -20
- package/dist/core/packet-wire.d.ts.map +1 -1
- package/dist/core/packet-wire.js +242 -368
- package/dist/core/packet-wire.js.map +1 -1
- package/dist/core/plurnk-uri.d.ts +12 -1
- package/dist/core/plurnk-uri.d.ts.map +1 -1
- package/dist/core/plurnk-uri.js +49 -29
- package/dist/core/plurnk-uri.js.map +1 -1
- package/dist/core/results.d.ts +16 -5
- package/dist/core/results.d.ts.map +1 -1
- package/dist/core/results.js +27 -18
- package/dist/core/results.js.map +1 -1
- package/dist/core/ruler_count.d.ts +4 -0
- package/dist/core/ruler_count.d.ts.map +1 -0
- package/dist/core/ruler_count.js +7 -0
- package/dist/core/ruler_count.js.map +1 -0
- package/dist/core/scheme-types.d.ts +9 -11
- package/dist/core/scheme-types.d.ts.map +1 -1
- package/dist/core/scheme-types.js.map +1 -1
- package/dist/core/search-gate.d.ts.map +1 -1
- package/dist/core/search-gate.js +3 -11
- package/dist/core/search-gate.js.map +1 -1
- package/dist/core/teaching-corpus.d.ts +6 -0
- package/dist/core/teaching-corpus.d.ts.map +1 -0
- package/dist/core/teaching-corpus.js +23 -0
- package/dist/core/teaching-corpus.js.map +1 -0
- package/dist/core/teaching.d.ts +0 -1
- package/dist/core/teaching.d.ts.map +1 -1
- package/dist/core/teaching.js +2 -8
- package/dist/core/teaching.js.map +1 -1
- package/dist/core/token-ruler.d.ts.map +1 -1
- package/dist/core/token-ruler.js +3 -16
- package/dist/core/token-ruler.js.map +1 -1
- package/dist/core/turn-scheduler.d.ts +1 -1
- package/dist/core/turn-scheduler.d.ts.map +1 -1
- package/dist/core/turn-scheduler.js +1 -1
- package/dist/core/turn-scheduler.js.map +1 -1
- package/dist/core/worker-cap.d.ts +2 -4
- package/dist/core/worker-cap.d.ts.map +1 -1
- package/dist/core/worker-cap.js +13 -4
- package/dist/core/worker-cap.js.map +1 -1
- package/dist/core/{run-ops.sql → worker-ops.sql} +11 -11
- package/dist/core/workspace-settings.d.ts.map +1 -1
- package/dist/core/workspace-settings.js +17 -9
- package/dist/core/workspace-settings.js.map +1 -1
- package/dist/digest/Digest.d.ts +2 -1
- package/dist/digest/Digest.d.ts.map +1 -1
- package/dist/digest/Digest.js +337 -138
- package/dist/digest/Digest.js.map +1 -1
- package/dist/digest/digest.sql +19 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -5
- package/dist/index.js.map +1 -1
- package/dist/matrix/live-specimen.d.ts +9 -0
- package/dist/matrix/live-specimen.d.ts.map +1 -0
- package/dist/matrix/live-specimen.js +37 -0
- package/dist/matrix/live-specimen.js.map +1 -0
- package/dist/observe/api.d.ts +6 -0
- package/dist/observe/api.d.ts.map +1 -0
- package/dist/observe/api.js +11 -0
- package/dist/observe/api.js.map +1 -0
- package/dist/observe/init.d.ts +7 -0
- package/dist/observe/init.d.ts.map +1 -0
- package/dist/observe/init.js +159 -0
- package/dist/observe/init.js.map +1 -0
- package/dist/observe/metrics.d.ts +6 -0
- package/dist/observe/metrics.d.ts.map +1 -0
- package/dist/observe/metrics.js +15 -0
- package/dist/observe/metrics.js.map +1 -0
- package/dist/observe/spans.d.ts +4 -0
- package/dist/observe/spans.d.ts.map +1 -0
- package/dist/observe/spans.js +51 -0
- package/dist/observe/spans.js.map +1 -0
- package/dist/schemes/EffectPolicy.d.ts +1 -0
- package/dist/schemes/EffectPolicy.d.ts.map +1 -1
- package/dist/schemes/EffectPolicy.js +5 -2
- package/dist/schemes/EffectPolicy.js.map +1 -1
- package/dist/schemes/Exec.d.ts +6 -11
- package/dist/schemes/Exec.d.ts.map +1 -1
- package/dist/schemes/Exec.js +364 -247
- package/dist/schemes/Exec.js.map +1 -1
- package/dist/schemes/ExecOutputScheme.d.ts +8 -7
- package/dist/schemes/ExecOutputScheme.d.ts.map +1 -1
- package/dist/schemes/ExecOutputScheme.js +48 -9
- package/dist/schemes/ExecOutputScheme.js.map +1 -1
- package/dist/schemes/File.d.ts +7 -11
- package/dist/schemes/File.d.ts.map +1 -1
- package/dist/schemes/File.js +279 -142
- package/dist/schemes/File.js.map +1 -1
- package/dist/schemes/Log.d.ts +4 -8
- package/dist/schemes/Log.d.ts.map +1 -1
- package/dist/schemes/Log.js +475 -208
- package/dist/schemes/Log.js.map +1 -1
- package/dist/schemes/Log.sql +62 -30
- package/dist/schemes/Prompt.d.ts +3 -2
- package/dist/schemes/Prompt.d.ts.map +1 -1
- package/dist/schemes/Prompt.js +9 -6
- package/dist/schemes/Prompt.js.map +1 -1
- package/dist/schemes/Skill.d.ts +1 -1
- package/dist/schemes/Skill.d.ts.map +1 -1
- package/dist/schemes/Skill.js +2 -3
- package/dist/schemes/Skill.js.map +1 -1
- package/dist/schemes/Worker.d.ts +8 -16
- package/dist/schemes/Worker.d.ts.map +1 -1
- package/dist/schemes/Worker.js +179 -69
- package/dist/schemes/Worker.js.map +1 -1
- package/dist/schemes/_entry-chunk.d.ts.map +1 -1
- package/dist/schemes/_entry-chunk.js +12 -5
- package/dist/schemes/_entry-chunk.js.map +1 -1
- package/dist/schemes/_entry-crud.d.ts +10 -9
- package/dist/schemes/_entry-crud.d.ts.map +1 -1
- package/dist/schemes/_entry-crud.js +59 -13
- package/dist/schemes/_entry-crud.js.map +1 -1
- package/dist/schemes/_entry-crud.sql +20 -8
- package/dist/schemes/_entry-find.d.ts +20 -15
- package/dist/schemes/_entry-find.d.ts.map +1 -1
- package/dist/schemes/_entry-find.js +339 -174
- package/dist/schemes/_entry-find.js.map +1 -1
- package/dist/schemes/_entry-find.sql +20 -8
- package/dist/schemes/_entry-graph.d.ts +4 -2
- package/dist/schemes/_entry-graph.d.ts.map +1 -1
- package/dist/schemes/_entry-graph.js +55 -31
- package/dist/schemes/_entry-graph.js.map +1 -1
- package/dist/schemes/_entry-graph.sql +37 -22
- package/dist/schemes/_entry-manifest.d.ts +10 -15
- package/dist/schemes/_entry-manifest.d.ts.map +1 -1
- package/dist/schemes/_entry-manifest.js +50 -268
- package/dist/schemes/_entry-manifest.js.map +1 -1
- package/dist/schemes/_entry-ops.d.ts +9 -14
- package/dist/schemes/_entry-ops.d.ts.map +1 -1
- package/dist/schemes/_entry-ops.js +149 -77
- package/dist/schemes/_entry-ops.js.map +1 -1
- package/dist/schemes/_entry-ops.sql +1 -1
- package/dist/schemes/_entry-semantic.d.ts +23 -8
- package/dist/schemes/_entry-semantic.d.ts.map +1 -1
- package/dist/schemes/_entry-semantic.js +141 -60
- package/dist/schemes/_entry-semantic.js.map +1 -1
- package/dist/schemes/_entry-semantic.sql +63 -45
- package/dist/schemes/_entry-send.d.ts +3 -4
- package/dist/schemes/_entry-send.d.ts.map +1 -1
- package/dist/schemes/_entry-send.js +48 -23
- package/dist/schemes/_entry-send.js.map +1 -1
- package/dist/schemes/_path-scope.d.ts +23 -0
- package/dist/schemes/_path-scope.d.ts.map +1 -0
- package/dist/schemes/_path-scope.js +61 -0
- package/dist/schemes/_path-scope.js.map +1 -0
- package/dist/schemes/_search-candidate.d.ts +20 -0
- package/dist/schemes/_search-candidate.d.ts.map +1 -0
- package/dist/schemes/_search-candidate.js +19 -0
- package/dist/schemes/_search-candidate.js.map +1 -0
- package/dist/schemes/_search-exclusion.d.ts +7 -0
- package/dist/schemes/_search-exclusion.d.ts.map +1 -0
- package/dist/schemes/_search-exclusion.js +23 -0
- package/dist/schemes/_search-exclusion.js.map +1 -0
- package/dist/schemes/_search-index.d.ts +6 -0
- package/dist/schemes/_search-index.d.ts.map +1 -0
- package/dist/schemes/_search-index.js +326 -0
- package/dist/schemes/_search-index.js.map +1 -0
- package/dist/schemes/cosine.js +1 -1
- package/dist/schemes/cosine.js.map +1 -1
- package/dist/schemes/exec-abort.js +3 -3
- package/dist/schemes/exec-abort.js.map +1 -1
- package/dist/schemes/exec-env.js +3 -3
- package/dist/schemes/exec-env.js.map +1 -1
- package/dist/server/BranchBatches.d.ts +48 -0
- package/dist/server/BranchBatches.d.ts.map +1 -0
- package/dist/server/BranchBatches.js +591 -0
- package/dist/server/BranchBatches.js.map +1 -0
- package/dist/server/Daemon.d.ts +36 -66
- package/dist/server/Daemon.d.ts.map +1 -1
- package/dist/server/Daemon.js +920 -446
- package/dist/server/Daemon.js.map +1 -1
- package/dist/server/DaemonModule.d.ts +31 -0
- package/dist/server/DaemonModule.d.ts.map +1 -0
- package/dist/server/DaemonModule.js +2 -0
- package/dist/server/DaemonModule.js.map +1 -0
- package/dist/server/branch-batch.sql +152 -0
- package/dist/server/client-input.d.ts +12 -0
- package/dist/server/client-input.d.ts.map +1 -1
- package/dist/server/client-input.js +262 -57
- package/dist/server/client-input.js.map +1 -1
- package/dist/server/dispatch-as-plurnk.d.ts +1 -1
- package/dist/server/dispatch-as-plurnk.d.ts.map +1 -1
- package/dist/server/dispatch-as-plurnk.js +15 -7
- package/dist/server/dispatch-as-plurnk.js.map +1 -1
- package/dist/server/drain.sql +92 -62
- package/dist/server/envelope.d.ts +2 -5
- package/dist/server/envelope.d.ts.map +1 -1
- package/dist/server/envelope.js +119 -95
- package/dist/server/envelope.js.map +1 -1
- package/dist/server/envelope.sql +19 -23
- package/dist/server/exec-poll-backoff.js +1 -1
- package/dist/server/exec-poll-backoff.js.map +1 -1
- package/dist/server/lifecycle-recovery.sql +79 -2
- package/dist/server/logEntry.d.ts +3 -1
- package/dist/server/logEntry.d.ts.map +1 -1
- package/dist/server/logEntry.js +4 -2
- package/dist/server/logEntry.js.map +1 -1
- package/dist/server/logEntry.sql +1 -1
- package/dist/server/loop-model.d.ts.map +1 -1
- package/dist/server/loop-model.js +22 -9
- package/dist/server/loop-model.js.map +1 -1
- package/dist/server/loopDocs.d.ts.map +1 -1
- package/dist/server/loopDocs.js +5 -4
- package/dist/server/loopDocs.js.map +1 -1
- package/dist/server/seam-entry-read.sql +15 -10
- package/dist/server/seam-log-read.sql +2 -2
- package/dist/server/seam-loop.sql +1 -1
- package/dist/server/seam-proposal-list.sql +17 -7
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +66 -60
- package/dist/service.js.map +1 -1
- package/migrations/001_schema.sql +897 -0
- package/package.json +57 -26
- package/dist/core/PluginLoader.d.ts +0 -20
- package/dist/core/PluginLoader.d.ts.map +0 -1
- package/dist/core/PluginLoader.js +0 -142
- package/dist/core/PluginLoader.js.map +0 -1
- package/dist/core/TelemetryChannel.d.ts +0 -37
- package/dist/core/TelemetryChannel.d.ts.map +0 -1
- package/dist/core/TelemetryChannel.js +0 -80
- package/dist/core/TelemetryChannel.js.map +0 -1
- package/dist/core/path-decode.d.ts +0 -3
- package/dist/core/path-decode.d.ts.map +0 -1
- package/dist/core/path-decode.js +0 -9
- package/dist/core/path-decode.js.map +0 -1
- package/dist/core/plugin-attribution.d.ts +0 -5
- package/dist/core/plugin-attribution.d.ts.map +0 -1
- package/dist/core/plugin-attribution.js +0 -39
- package/dist/core/plugin-attribution.js.map +0 -1
- package/dist/core/world-state.d.ts +0 -10
- package/dist/core/world-state.d.ts.map +0 -1
- package/dist/core/world-state.js +0 -35
- package/dist/core/world-state.js.map +0 -1
- package/dist/core/world-state.sql +0 -35
- package/dist/core/zero-pin.d.ts +0 -3
- package/dist/core/zero-pin.d.ts.map +0 -1
- package/dist/core/zero-pin.js +0 -16
- package/dist/core/zero-pin.js.map +0 -1
- package/dist/server/auto.d.ts +0 -6
- package/dist/server/auto.d.ts.map +0 -1
- package/dist/server/auto.js +0 -63
- package/dist/server/auto.js.map +0 -1
- package/dist/server/clientTurn.d.ts +0 -6
- package/dist/server/clientTurn.d.ts.map +0 -1
- package/dist/server/clientTurn.js +0 -22
- package/dist/server/clientTurn.js.map +0 -1
- package/dist/server/clientTurn.sql +0 -10
- package/dist/server/noProposals.d.ts +0 -6
- package/dist/server/noProposals.d.ts.map +0 -1
- package/dist/server/noProposals.js +0 -37
- package/dist/server/noProposals.js.map +0 -1
- package/dist/server/version-info.d.ts +0 -14
- package/dist/server/version-info.d.ts.map +0 -1
- package/dist/server/version-info.js +0 -69
- package/dist/server/version-info.js.map +0 -1
- package/migrations/0000-00-00.01_schema.sql +0 -536
- package/migrations/0004_loop-provider.sql +0 -3
- package/migrations/0005_subscription-published-channel.sql +0 -3
- package/migrations/0006_loop-max-turns.sql +0 -3
package/dist/server/drain.sql
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
--
|
|
2
|
-
--
|
|
3
|
-
-- claim atomically (100 → 102), execute, repeat.
|
|
1
|
+
-- {§worker-loop-lifecycle} — the worker-level loop queue: enqueue at status 100,
|
|
2
|
+
-- claim atomically (100 → 102) in FIFO order, execute, and continue draining.
|
|
4
3
|
|
|
5
4
|
-- PREP: drain_enqueue_loop
|
|
6
5
|
-- Insert a loop at queued state. Sequence is per-worker, 1-based.
|
|
@@ -28,8 +27,8 @@ SELECT max_turns FROM loops WHERE id = $loop_id;
|
|
|
28
27
|
-- PREP: drain_current_loop_for_worker
|
|
29
28
|
-- The worker's current NON-TERMINAL loop — active (102) or parked (202). At most one per worker
|
|
30
29
|
-- under drain semantics. Engine.inject uses it to write the prompt entry for the right loop's
|
|
31
|
-
-- next turn;
|
|
32
|
-
-- orphaning it with a fresh loop. (102 preferred if both somehow exist.)
|
|
30
|
+
-- next turn; {§methods-loop-run-fold-consistency} requires an IRC to target a PARKED loop's
|
|
31
|
+
-- resume turn instead of orphaning it with a fresh loop. (102 preferred if both somehow exist.)
|
|
33
32
|
SELECT id, sequence FROM loops
|
|
34
33
|
WHERE worker_id = $worker_id AND status IN (102, 202)
|
|
35
34
|
ORDER BY (status = 102) DESC, sequence ASC
|
|
@@ -37,45 +36,28 @@ LIMIT 1;
|
|
|
37
36
|
|
|
38
37
|
-- PREP: drain_next_turn_seq_for_loop
|
|
39
38
|
-- Next turn sequence for the given loop. Used by Engine.inject to compute
|
|
40
|
-
-- the
|
|
39
|
+
-- the turn on which its next prompt frame will be published.
|
|
41
40
|
SELECT COALESCE(MAX(sequence), 0) + 1 AS next FROM turns WHERE loop_id = $loop_id;
|
|
42
41
|
|
|
43
42
|
-- PREP: drain_get_worker_workspace
|
|
44
43
|
-- Resolve workerId → workspaceId. Needed when wake/inject paths only have the
|
|
45
|
-
-- workerId (e.g., a stream concluded in
|
|
46
|
-
-- context
|
|
44
|
+
-- workerId (e.g., a stream concluded in worker X; daemon needs the workspace
|
|
45
|
+
-- context paired with that worker's owner identity).
|
|
47
46
|
SELECT workspace_id FROM workers WHERE id = $worker_id;
|
|
48
47
|
|
|
49
|
-
-- PREP:
|
|
50
|
-
--
|
|
51
|
-
--
|
|
52
|
-
--
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
-- Pattern is built JS-side via promptLoopPrefix (worker-qualified `/prompt/<run>/<loop>/%`,
|
|
56
|
-
-- matching the foist's #pathnameOf and the inject) — SqlRite's parameter
|
|
57
|
-
-- binding doesn't reliably coerce integers for `LIKE` with `||`.
|
|
58
|
-
SELECT c.content, e.pathname
|
|
59
|
-
FROM entries e
|
|
60
|
-
JOIN entry_channels c ON c.entry_id = e.id
|
|
61
|
-
WHERE e.scheme = 'prompt'
|
|
62
|
-
AND e.owner_id = $owner_id
|
|
63
|
-
AND e.pathname LIKE $pattern
|
|
64
|
-
AND c.name = 'body'
|
|
65
|
-
ORDER BY e.id DESC
|
|
66
|
-
LIMIT 1;
|
|
67
|
-
|
|
68
|
-
-- PREP: drain_count_prompts_for_loop
|
|
69
|
-
-- {§prompt-loop-containment} — the per-loop prompt ORDINAL source: N = count+1. The frame key is
|
|
70
|
-
-- the Nth prompt of the loop, never a turn slot, so rapid arrivals can never share a row.
|
|
71
|
-
SELECT COUNT(*) AS n FROM entries
|
|
48
|
+
-- PREP: drain_next_prompt_ordinal_for_loop
|
|
49
|
+
-- {§prompt-loop-containment} — derive the next per-loop frame ordinal from the
|
|
50
|
+
-- greatest materialized ordinal. The initial frame reserves ordinal 1 even
|
|
51
|
+
-- before turn 1 materializes it, so an injection starts at 2.
|
|
52
|
+
SELECT COALESCE(MAX(CAST(substr(pathname, $prefix_len + 1) AS INTEGER)), 1) + 1 AS next
|
|
53
|
+
FROM entries
|
|
72
54
|
WHERE scheme = 'prompt' AND owner_id = $owner_id AND pathname LIKE $pattern;
|
|
73
55
|
|
|
74
56
|
-- PREP: drain_undelivered_prompts_for_loop
|
|
75
|
-
-- {§prompt-loop-containment}
|
|
76
|
-
--
|
|
77
|
-
-- boundary
|
|
78
|
-
SELECT c.content, e.pathname
|
|
57
|
+
-- {§prompt-loop-containment} - the prompts the loop contains but has not yet delivered: no
|
|
58
|
+
-- actionless prompt row exists for the frame in this loop. Oldest first; the next turn
|
|
59
|
+
-- boundary publishes each, so every arrival reaches the model exactly once.
|
|
60
|
+
SELECT c.content, e.pathname, e.attributes
|
|
79
61
|
FROM entries e
|
|
80
62
|
JOIN entry_channels c ON c.entry_id = e.id
|
|
81
63
|
WHERE e.scheme = 'prompt'
|
|
@@ -84,15 +66,15 @@ WHERE e.scheme = 'prompt'
|
|
|
84
66
|
AND c.name = 'body'
|
|
85
67
|
AND NOT EXISTS (
|
|
86
68
|
SELECT 1 FROM log_entries le
|
|
87
|
-
WHERE le.loop_id = $loop_id AND le.origin = 'plurnk' AND le.op = '
|
|
69
|
+
WHERE le.loop_id = $loop_id AND le.origin = 'plurnk' AND le.op = 'prompt'
|
|
88
70
|
AND le.scheme = 'prompt' AND le.pathname = e.pathname
|
|
89
71
|
)
|
|
90
|
-
ORDER BY e.
|
|
72
|
+
ORDER BY CAST(substr(e.pathname, $prefix_len + 1) AS INTEGER) ASC;
|
|
91
73
|
|
|
92
74
|
-- PREP: drain_get_all_prompt_bodies_for_loop
|
|
93
|
-
-- Sources the Active User Prompts section
|
|
75
|
+
-- Sources the Active User Prompts section: EVERY prompt entry the
|
|
94
76
|
-- current loop holds, OLDEST first — typically one, but an active loop admits injected
|
|
95
|
-
-- prompts (multiple
|
|
77
|
+
-- prompts (multiple prompt:///<loop>/<N> entries), all shown in order. Same pattern as
|
|
96
78
|
-- the latest-only sibling (promptLoopPrefix pattern, built JS-side); the section renders
|
|
97
79
|
-- each body as a bare heredoc.
|
|
98
80
|
SELECT c.content, e.pathname
|
|
@@ -102,18 +84,20 @@ WHERE e.scheme = 'prompt'
|
|
|
102
84
|
AND e.owner_id = $owner_id
|
|
103
85
|
AND e.pathname LIKE $pattern
|
|
104
86
|
AND c.name = 'body'
|
|
105
|
-
ORDER BY e.
|
|
87
|
+
ORDER BY CAST(substr(e.pathname, $prefix_len + 1) AS INTEGER) ASC;
|
|
106
88
|
|
|
107
|
-
-- PREP:
|
|
89
|
+
-- PREP: drain_orphaned_prompts_for_loop
|
|
108
90
|
-- A loop can terminate before consuming a next-turn prompt injected into it
|
|
109
|
-
-- (a wake-on-completion, or a
|
|
110
|
-
-- loop never reached). Engine.inject writes prompt
|
|
91
|
+
-- (a wake-on-completion, or a runLoop-while-active prompt that landed on a turn the
|
|
92
|
+
-- loop never reached). Engine.inject writes prompt:///<loop>/<N>;
|
|
111
93
|
-- if the loop ended at turn K, an injected prompt at turn > K never ran.
|
|
112
|
-
--
|
|
113
|
-
--
|
|
94
|
+
-- Return the complete orphan set oldest-first with the ended loop posture so
|
|
95
|
+
-- one recovery loop can preserve frame cardinality and ordering.
|
|
114
96
|
-- $pattern = promptLoopPrefix + '%', $prefix_len = length of that prefix
|
|
115
97
|
-- built JS-side (per the SqlRite LIKE-binding note above).
|
|
116
|
-
SELECT c.content AS body, l.flags AS flags, l.provider_spec AS provider_spec
|
|
98
|
+
SELECT c.content AS body, l.flags AS flags, l.provider_spec AS provider_spec,
|
|
99
|
+
l.max_turns AS max_turns,
|
|
100
|
+
json_extract(e.attributes, '$.openPaths') AS open_paths
|
|
117
101
|
FROM entries e
|
|
118
102
|
JOIN entry_channels c ON c.entry_id = e.id
|
|
119
103
|
JOIN loops l ON l.id = $loop_id
|
|
@@ -123,34 +107,80 @@ WHERE e.scheme = 'prompt'
|
|
|
123
107
|
AND c.name = 'body'
|
|
124
108
|
AND NOT EXISTS (
|
|
125
109
|
SELECT 1 FROM log_entries le
|
|
126
|
-
WHERE le.loop_id = $loop_id AND le.origin = 'plurnk' AND le.op = '
|
|
110
|
+
WHERE le.loop_id = $loop_id AND le.origin = 'plurnk' AND le.op = 'prompt'
|
|
127
111
|
AND le.scheme = 'prompt' AND le.pathname = e.pathname
|
|
128
112
|
)
|
|
129
|
-
ORDER BY e.
|
|
130
|
-
|
|
113
|
+
ORDER BY CAST(substr(e.pathname, $prefix_len + 1) AS INTEGER) ASC;
|
|
114
|
+
|
|
115
|
+
-- PREP: drain_enqueue_orphan_recovery_loop
|
|
116
|
+
-- {§prompt-loop-containment}: recovery identity is the concluded source loop.
|
|
117
|
+
-- Retrying returns that same queued loop instead of minting duplicate work.
|
|
118
|
+
INSERT INTO loops (
|
|
119
|
+
worker_id, sequence, status, prompt, flags, provider_spec, max_turns,
|
|
120
|
+
open_paths, orphan_source_loop_id
|
|
121
|
+
)
|
|
122
|
+
VALUES (
|
|
123
|
+
$worker_id, $sequence, 100, $prompt, $flags, $provider_spec, $max_turns,
|
|
124
|
+
$open_paths, $orphan_source_loop_id
|
|
125
|
+
)
|
|
126
|
+
ON CONFLICT (orphan_source_loop_id) DO UPDATE
|
|
127
|
+
SET orphan_source_loop_id = excluded.orphan_source_loop_id
|
|
128
|
+
RETURNING id, sequence, status;
|
|
129
|
+
|
|
130
|
+
-- PREP: drain_rehome_orphaned_prompt_frames
|
|
131
|
+
-- Move, rather than copy, the source loop's undelivered entry identities into
|
|
132
|
+
-- the recovery loop. The materialized rank freezes the complete source set for
|
|
133
|
+
-- this one atomic statement while pathnames change underneath it.
|
|
134
|
+
WITH orphaned(id, ordinal) AS MATERIALIZED (
|
|
135
|
+
SELECT e.id,
|
|
136
|
+
ROW_NUMBER() OVER (
|
|
137
|
+
ORDER BY CAST(substr(e.pathname, $source_prefix_len + 1) AS INTEGER) ASC
|
|
138
|
+
)
|
|
139
|
+
FROM entries e
|
|
140
|
+
WHERE e.scheme = 'prompt'
|
|
141
|
+
AND e.owner_id = $owner_id
|
|
142
|
+
AND e.pathname LIKE $source_pattern
|
|
143
|
+
AND EXISTS (
|
|
144
|
+
SELECT 1 FROM entry_channels c
|
|
145
|
+
WHERE c.entry_id = e.id AND c.name = 'body'
|
|
146
|
+
)
|
|
147
|
+
AND NOT EXISTS (
|
|
148
|
+
SELECT 1 FROM log_entries le
|
|
149
|
+
WHERE le.loop_id = $source_loop_id AND le.origin = 'plurnk' AND le.op = 'prompt'
|
|
150
|
+
AND le.scheme = 'prompt' AND le.pathname = e.pathname
|
|
151
|
+
)
|
|
152
|
+
)
|
|
153
|
+
UPDATE entries
|
|
154
|
+
SET pathname = $target_prefix || (
|
|
155
|
+
SELECT ordinal FROM orphaned WHERE orphaned.id = entries.id
|
|
156
|
+
)
|
|
157
|
+
WHERE id IN (SELECT id FROM orphaned)
|
|
158
|
+
RETURNING id, pathname;
|
|
131
159
|
|
|
132
160
|
-- PREP: drain_find_slept_loop
|
|
133
161
|
-- A worker's parked (slept) loop — SEND[202] suspends it at status 202, resumable by a wake
|
|
134
|
-
-- (§worker-lifecycle-wake-liveness). A worker parks one at a time; take the most recent.
|
|
162
|
+
-- ({§worker-lifecycle-wake-liveness}). A worker parks one at a time; take the most recent.
|
|
135
163
|
SELECT id FROM loops WHERE worker_id = $worker_id AND status = 202 ORDER BY sequence DESC LIMIT 1;
|
|
136
164
|
|
|
137
165
|
-- PREP: drain_loop_provider_spec
|
|
138
166
|
SELECT provider_spec FROM loops WHERE id = $loop_id;
|
|
139
167
|
|
|
140
168
|
-- PREP: drain_worker_min_poll
|
|
141
|
-
--
|
|
142
|
-
--
|
|
143
|
-
--
|
|
144
|
-
SELECT
|
|
169
|
+
-- EXEC `<T,P>` — aggregate each open subscription's policy into one worker timer. A fixed cadence
|
|
170
|
+
-- wins at its tightest positive value; otherwise any omitted cadence requests default backoff;
|
|
171
|
+
-- only an all-zero set disables the timer. Child-only joins have no subscription policy.
|
|
172
|
+
SELECT
|
|
173
|
+
COUNT(*) AS open_count,
|
|
174
|
+
CASE
|
|
175
|
+
WHEN COUNT(*) = 0 THEN NULL
|
|
176
|
+
WHEN MIN(CASE WHEN poll_seconds > 0 THEN poll_seconds END) IS NOT NULL
|
|
177
|
+
THEN MIN(CASE WHEN poll_seconds > 0 THEN poll_seconds END)
|
|
178
|
+
WHEN SUM(CASE WHEN poll_seconds IS NULL THEN 1 ELSE 0 END) > 0 THEN NULL
|
|
179
|
+
ELSE 0
|
|
180
|
+
END AS poll_seconds
|
|
145
181
|
FROM subscriptions WHERE worker_id = $worker_id AND closed_at IS NULL;
|
|
146
182
|
|
|
147
183
|
-- PREP: worker_parent_id
|
|
148
|
-
-- A worker's parent (worker:// spawn / fork set parent_worker_id, §lifecycle-terms). NULL = a root
|
|
149
|
-
-- Used at drain-exit to wake a parent that parked awaiting this child (§
|
|
184
|
+
-- A worker's parent (worker:// spawn / fork set parent_worker_id, {§lifecycle-terms}). NULL = a root worker.
|
|
185
|
+
-- Used at drain-exit to wake a parent that parked awaiting this child ({§worker-loop-lifecycle} topology join).
|
|
150
186
|
SELECT parent_worker_id FROM workers WHERE id = $worker_id;
|
|
151
|
-
|
|
152
|
-
-- PREP: drain_active_loop_flags
|
|
153
|
-
-- #368 — the LIVE loop's persisted flags for the fold-posture guard: an inject carrying flags
|
|
154
|
-
-- that differ from the loop it would fold into is refused, never a silent posture discard.
|
|
155
|
-
-- The worker's currently-executing loop is its most recent non-terminal one.
|
|
156
|
-
SELECT id, flags FROM loops WHERE worker_id = $worker_id AND status IN (100, 102) ORDER BY sequence DESC LIMIT 1;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Db } from "../core/Db.ts";
|
|
2
|
+
import { type SchemeResult } from "../core/results.ts";
|
|
2
3
|
export interface WorkspaceRow {
|
|
3
4
|
id: number;
|
|
4
5
|
name: string;
|
|
@@ -19,14 +20,10 @@ export interface ClientEnvelope {
|
|
|
19
20
|
projectRoot: string | null;
|
|
20
21
|
workerId: number;
|
|
21
22
|
workerName: string;
|
|
22
|
-
modelWorkerId: number | null;
|
|
23
|
-
clientLoopId: number | null;
|
|
24
23
|
}
|
|
25
24
|
export default class Envelope {
|
|
26
25
|
#private;
|
|
27
|
-
static readonly RESERVED_RUN_NAMES: ReadonlySet<string>;
|
|
28
26
|
static generateWorkspaceName(): string;
|
|
29
|
-
static mintWorkerName(db: Db, workspaceId: number, prefix: string): Promise<string>;
|
|
30
27
|
static createClientEnvelope(db: Db, opts?: {
|
|
31
28
|
name?: string;
|
|
32
29
|
prefix?: string;
|
|
@@ -46,7 +43,7 @@ export default class Envelope {
|
|
|
46
43
|
static ensurePlurnkWorker(db: Db, workspaceId: number): Promise<number>;
|
|
47
44
|
static listWorkersForWorkspace(db: Db, workspaceId: number): Promise<WorkerRow[]>;
|
|
48
45
|
static listPromptsForWorkspace(db: Db, workspaceId: number, limit: number): Promise<string[]>;
|
|
49
|
-
static closeClientLoop(db: Db, loopId: number,
|
|
46
|
+
static closeClientLoop(db: Db, loopId: number, result: SchemeResult): Promise<void>;
|
|
50
47
|
static listWorkspaces(db: Db): Promise<WorkspaceRow[]>;
|
|
51
48
|
static updateWorkspaceName(db: Db, workspaceId: number, name: string): Promise<string>;
|
|
52
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../../src/server/envelope.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../../src/server/envelope.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AAExC,OAAgB,EAAyB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAcvF,MAAM,WAAW,YAAY;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;CACzC;AAKD,MAAM,WAAW,cAAc;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,CAAC,OAAO,OAAO,QAAQ;;IAUzB,MAAM,CAAC,qBAAqB,IAAI,MAAM,CAErC;IAED,OAAa,oBAAoB,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,cAAc,CAAC,CA+BhK;IAgED,OAAa,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,cAAc,CAAC,CAiB1I;IAID,OAAa,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAIvE;IAQD,OAAa,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAehH;IAED,OAAa,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAS3E;IAKD,OAAa,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAM5E;IAED,OAAa,uBAAuB,CAAC,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAEtF;IAID,OAAa,uBAAuB,CAAC,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAGlG;IAED,OAAa,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAWxF;IAED,OAAa,cAAc,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAE3D;IAKD,OAAa,mBAAmB,CAAC,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA2B3F;CACJ"}
|
package/dist/server/envelope.js
CHANGED
|
@@ -1,21 +1,17 @@
|
|
|
1
|
-
// Envelope lifecycle helpers for
|
|
1
|
+
// Envelope lifecycle helpers for module clients. SPEC {§connection-lifecycle}.
|
|
2
2
|
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
// the daemon opens a NEW run within the workspace and a NEW client loop within
|
|
7
|
-
// that worker; the client loop closes on disconnect.
|
|
3
|
+
// A client-interface module receives this value from an explicit workspace create
|
|
4
|
+
// or attach call. Core creates or selects the client worker but retains no transport
|
|
5
|
+
// binding; each dispatched client action allocates and settles its own journal segment.
|
|
8
6
|
import GitMembership from "../core/git-membership.js";
|
|
9
|
-
import
|
|
7
|
+
import Results, { OperationFailureError } from "../core/results.js";
|
|
8
|
+
import LoopLifecycle from "../core/LoopLifecycle.js";
|
|
9
|
+
import WorkerName from "../core/WorkerName.js";
|
|
10
|
+
const envelopeFailure = (owner, code, status, detail, extensions = {}) => new OperationFailureError(Results.failure(owner, code, status, detail, {}, extensions));
|
|
10
11
|
export default class Envelope {
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
// lookup, so a client can neither forge nor hijack one (SPEC §methods).
|
|
15
|
-
static RESERVED_RUN_NAMES = Owner.RESERVED; // §methods-worker-name-reserved + {§entry-owner} (commons/plurnk rows, ~ self-sigil)
|
|
16
|
-
// Grammar 0.5.0 (#10): Workspace and Run carry user-renameable string names.
|
|
17
|
-
// Defaults are `workspace-{unixtime}` and `run-{unixtime}`; random suffix avoids
|
|
18
|
-
// collisions when two creations land in the same second.
|
|
12
|
+
// Workspace names default to `workspace-{unixtime}-{random}`; the suffix avoids
|
|
13
|
+
// collisions when two creations land in the same second. Worker names use the
|
|
14
|
+
// workspace-local `<prefix>-<ordinal>` contract in WorkerName.
|
|
19
15
|
static #tsName(prefix) {
|
|
20
16
|
const ts = Math.floor(Date.now() / 1000);
|
|
21
17
|
const rand = Math.floor(Math.random() * 0xFFFFFF).toString(36).padStart(4, "0");
|
|
@@ -24,81 +20,87 @@ export default class Envelope {
|
|
|
24
20
|
static generateWorkspaceName() {
|
|
25
21
|
return Envelope.#tsName("workspace");
|
|
26
22
|
}
|
|
27
|
-
static async mintWorkerName(db, workspaceId, prefix) {
|
|
28
|
-
const count = await db.envelope_count_workers_by_prefix.get({ workspace_id: workspaceId, name_prefix: `${prefix}-%` });
|
|
29
|
-
let n = (count?.n ?? 0) + 1;
|
|
30
|
-
// A manually-named squatter (`model-3` typed by a user) can hold the ordinal — bump past it.
|
|
31
|
-
while (await db.envelope_get_worker_by_name.get({ workspace_id: workspaceId, name: `${prefix}-${n}` }) !== undefined)
|
|
32
|
-
n++;
|
|
33
|
-
return `${prefix}-${n}`;
|
|
34
|
-
}
|
|
35
23
|
static async createClientEnvelope(db, opts = {}) {
|
|
36
24
|
const name = opts.name ?? Envelope.#tsName(opts.prefix ?? "workspace");
|
|
37
25
|
const projectRoot = opts.projectRoot ?? null;
|
|
38
26
|
const workspace = await db.envelope_insert_workspace.get({ name, project_root: projectRoot, settings: opts.settings ?? "{}" });
|
|
39
|
-
if (workspace === undefined)
|
|
40
|
-
throw
|
|
41
|
-
|
|
27
|
+
if (workspace === undefined) {
|
|
28
|
+
throw envelopeFailure("daemon:workspace", "name-conflict", 409, `Workspace name '${name}' is already in use.`, {
|
|
29
|
+
name,
|
|
30
|
+
recovery: "Choose another workspace name or attach to the existing workspace.",
|
|
31
|
+
retryable: false,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
// SPEC {§membership} D4 — establish git-ls-files membership at workspace setup so
|
|
42
35
|
// tracked files are members before the first op. No-op when projectRoot is
|
|
43
36
|
// null (headless) or not a git working tree.
|
|
44
37
|
await GitMembership.resolveGitMembership(db, workspace.id, undefined);
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
38
|
+
const worker = await WorkerName.claimAuto(db, {
|
|
39
|
+
workspaceId: workspace.id,
|
|
40
|
+
prefix: "client",
|
|
41
|
+
origin: "client",
|
|
42
|
+
});
|
|
49
43
|
return {
|
|
50
44
|
workspaceId: workspace.id, workspaceName: workspace.name,
|
|
51
45
|
projectRoot: workspace.project_root,
|
|
52
|
-
workerId:
|
|
53
|
-
modelWorkerId: null,
|
|
54
|
-
clientLoopId: null,
|
|
46
|
+
workerId: worker.id, workerName: worker.name,
|
|
55
47
|
};
|
|
56
48
|
}
|
|
57
49
|
// Resolve the worker inside a workspace. Three modes:
|
|
58
50
|
// - opts.workerId given: lookup by id, verify workspace ownership (else throw).
|
|
59
51
|
// - opts.workerName given: lookup by (workspaceId, name); reuse if found, create otherwise.
|
|
60
|
-
// - neither: create a new
|
|
52
|
+
// - neither: create a new worker with an auto-generated name (current behavior).
|
|
61
53
|
// `workerId` and `workerName` are alternatives — passing both throws (use one).
|
|
62
54
|
static async #resolveWorker(db, workspaceId, opts) {
|
|
63
55
|
if (opts.workerId !== undefined && opts.workerName !== undefined) {
|
|
64
|
-
throw
|
|
56
|
+
throw envelopeFailure("daemon:worker", "worker-selector-conflict", 400, "Workspace attachment received both a worker ID and worker name.", {
|
|
57
|
+
workerId: opts.workerId,
|
|
58
|
+
workerName: opts.workerName,
|
|
59
|
+
recovery: "Select the worker by either ID or name.",
|
|
60
|
+
retryable: false,
|
|
61
|
+
});
|
|
65
62
|
}
|
|
66
63
|
if (opts.workerId !== undefined) {
|
|
67
64
|
const existing = await db.envelope_get_worker_by_id.get({ id: opts.workerId });
|
|
68
|
-
if (existing === undefined)
|
|
69
|
-
throw
|
|
70
|
-
|
|
71
|
-
|
|
65
|
+
if (existing === undefined) {
|
|
66
|
+
throw envelopeFailure("daemon:worker", "worker-not-found", 404, `Worker ${opts.workerId} does not exist.`, { workerId: opts.workerId });
|
|
67
|
+
}
|
|
68
|
+
if (existing.workspace_id !== workspaceId) {
|
|
69
|
+
throw envelopeFailure("daemon:worker", "workspace-mismatch", 409, `Worker ${opts.workerId} does not belong to workspace ${workspaceId}.`, {
|
|
70
|
+
workerId: opts.workerId,
|
|
71
|
+
workspaceId,
|
|
72
|
+
actualWorkspaceId: existing.workspace_id,
|
|
73
|
+
retryable: false,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
72
76
|
return { id: existing.id, name: existing.name };
|
|
73
77
|
}
|
|
74
78
|
if (opts.workerName !== undefined) {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
}
|
|
78
|
-
const existing = await db.envelope_get_worker_by_name.get({ workspace_id: workspaceId, name: opts.workerName });
|
|
79
|
+
const workerName = WorkerName.assert(opts.workerName); // {§worker-name-minting}
|
|
80
|
+
const existing = await db.envelope_get_worker_by_name.get({ workspace_id: workspaceId, name: workerName });
|
|
79
81
|
if (existing !== undefined)
|
|
80
82
|
return existing;
|
|
81
|
-
const created = await db.envelope_insert_worker.get({ workspace_id: workspaceId, name:
|
|
83
|
+
const created = await db.envelope_insert_worker.get({ workspace_id: workspaceId, name: workerName, origin: "client" });
|
|
82
84
|
if (created === undefined)
|
|
83
|
-
throw new Error("resolveWorker:
|
|
85
|
+
throw new Error("resolveWorker: worker insert returned no row");
|
|
84
86
|
return created;
|
|
85
87
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
88
|
+
return await WorkerName.claimAuto(db, {
|
|
89
|
+
workspaceId,
|
|
90
|
+
prefix: "client",
|
|
91
|
+
origin: "client",
|
|
92
|
+
});
|
|
90
93
|
}
|
|
91
94
|
static async attachToWorkspace(db, workspaceId, opts = {}) {
|
|
92
95
|
const workspace = await db.envelope_get_workspace.get({ id: workspaceId });
|
|
93
|
-
if (workspace === undefined)
|
|
94
|
-
throw
|
|
95
|
-
|
|
96
|
+
if (workspace === undefined) {
|
|
97
|
+
throw envelopeFailure("daemon:workspace", "workspace-not-found", 404, `Workspace ${workspaceId} does not exist.`, { workspaceId });
|
|
98
|
+
}
|
|
99
|
+
const worker = await Envelope.#resolveWorker(db, workspace.id, opts);
|
|
96
100
|
return {
|
|
97
101
|
workspaceId: workspace.id, workspaceName: workspace.name,
|
|
98
102
|
projectRoot: workspace.project_root,
|
|
99
|
-
workerId:
|
|
100
|
-
modelWorkerId: null,
|
|
101
|
-
clientLoopId: null,
|
|
103
|
+
workerId: worker.id, workerName: worker.name,
|
|
102
104
|
};
|
|
103
105
|
}
|
|
104
106
|
// Client action journal allocator. One action allocates one segment; its
|
|
@@ -109,70 +111,92 @@ export default class Envelope {
|
|
|
109
111
|
throw new Error("ensureClientLoop: loop insert returned no row");
|
|
110
112
|
return loop.id;
|
|
111
113
|
}
|
|
112
|
-
// Lazy model-
|
|
113
|
-
// The model's conversation lives in its
|
|
114
|
-
//
|
|
115
|
-
// the client's
|
|
116
|
-
//
|
|
117
|
-
//
|
|
118
|
-
// Distinct from ensureModelWorker (the stable default conversation) and forkWorker (copies history).
|
|
114
|
+
// Lazy model-worker allocator ({§connection-lifecycle}, {§machine-processes} — the client writes to its own worker).
|
|
115
|
+
// The model's conversation lives in its own worker, distinct from the client's
|
|
116
|
+
// client worker, so the packet — rendered from the model worker — never carries
|
|
117
|
+
// the client's dispatched actions. The module resolves and retains the binding.
|
|
118
|
+
// {§methods-conversation-worker}: a fresh conversation is a named, empty-log,
|
|
119
|
+
// model-origin root, distinct from the stable default and from a history-copying fork.
|
|
119
120
|
static async createModelWorker(db, workspaceId, name) {
|
|
120
|
-
if (name
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
121
|
+
if (name === undefined) {
|
|
122
|
+
return await WorkerName.claimAuto(db, {
|
|
123
|
+
workspaceId,
|
|
124
|
+
prefix: "model",
|
|
125
|
+
origin: "model",
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
const worker = await db.envelope_insert_worker.get({
|
|
129
|
+
workspace_id: workspaceId,
|
|
130
|
+
name: WorkerName.assert(name),
|
|
131
|
+
origin: "model",
|
|
132
|
+
});
|
|
133
|
+
if (worker === undefined)
|
|
134
|
+
throw new Error("createModelWorker: worker insert returned no row");
|
|
135
|
+
return worker;
|
|
126
136
|
}
|
|
127
137
|
static async ensureModelWorker(db, workspaceId) {
|
|
128
|
-
//
|
|
129
|
-
//
|
|
130
|
-
//
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
if (run === undefined)
|
|
137
|
-
throw new Error("ensureModelWorker: run insert returned no row");
|
|
138
|
-
return run.id;
|
|
138
|
+
// {§methods-model-worker}: idempotence lives at the seam, not in a client's
|
|
139
|
+
// connection cache. The durable role, not root ordering or a name parse,
|
|
140
|
+
// distinguishes this default from arbitrary fresh conversations.
|
|
141
|
+
const worker = await WorkerName.ensureDefaultConversation(db, {
|
|
142
|
+
workspaceId,
|
|
143
|
+
prefix: "model",
|
|
144
|
+
});
|
|
145
|
+
return worker.id;
|
|
139
146
|
}
|
|
140
|
-
// Self-hosting keystone (§actor-boundary): the workspace's
|
|
141
|
-
//
|
|
142
|
-
//
|
|
143
|
-
// to other workers except through the shared workspace filesystem.
|
|
147
|
+
// Self-hosting keystone ({§actor-boundary-self-hosting}): the workspace's
|
|
148
|
+
// reserved `plurnk` worker. One durable worker per workspace, reused across
|
|
149
|
+
// the ephemeral administrative loops that dispatch ordinary runtime-owned ops.
|
|
144
150
|
static async ensurePlurnkWorker(db, workspaceId) {
|
|
145
151
|
const existing = await db.envelope_get_worker_by_name.get({ workspace_id: workspaceId, name: "plurnk" });
|
|
146
152
|
if (existing !== undefined)
|
|
147
153
|
return existing.id;
|
|
148
|
-
const
|
|
149
|
-
if (
|
|
150
|
-
throw new Error("ensurePlurnkWorker:
|
|
151
|
-
return
|
|
154
|
+
const worker = await db.envelope_insert_worker.get({ workspace_id: workspaceId, name: "plurnk", origin: "plurnk" });
|
|
155
|
+
if (worker === undefined)
|
|
156
|
+
throw new Error("ensurePlurnkWorker: worker insert returned no row");
|
|
157
|
+
return worker.id;
|
|
152
158
|
}
|
|
153
159
|
static async listWorkersForWorkspace(db, workspaceId) {
|
|
154
160
|
return await db.envelope_list_workers_for_workspace.all({ workspace_id: workspaceId });
|
|
155
161
|
}
|
|
156
|
-
//
|
|
157
|
-
//
|
|
158
|
-
// client seeds up/down history without log archaeology.
|
|
162
|
+
// {§methods-workspace-prompts}: expose root-conversation loop seeds directly,
|
|
163
|
+
// without forcing clients to reconstruct prompt history from log rows.
|
|
159
164
|
static async listPromptsForWorkspace(db, workspaceId, limit) {
|
|
160
165
|
const rows = await db.envelope_list_workspace_prompts.all({ workspace_id: workspaceId, limit });
|
|
161
166
|
return rows.map((r) => r.prompt);
|
|
162
167
|
}
|
|
163
|
-
static async closeClientLoop(db, loopId,
|
|
164
|
-
|
|
168
|
+
static async closeClientLoop(db, loopId, result) {
|
|
169
|
+
const exact = structuredClone(Results.assert(result));
|
|
170
|
+
if (exact.problem !== undefined && exact.problem.instance === undefined) {
|
|
171
|
+
Results.attachInstance(exact, `loop:///${loopId}`);
|
|
172
|
+
}
|
|
173
|
+
await db.envelope_close_client_loop.run({
|
|
174
|
+
status: LoopLifecycle.projectStatus(exact.status),
|
|
175
|
+
result: JSON.stringify(exact),
|
|
176
|
+
message: exact.problem?.detail ?? null,
|
|
177
|
+
loop_id: loopId,
|
|
178
|
+
});
|
|
165
179
|
}
|
|
166
180
|
static async listWorkspaces(db) {
|
|
167
181
|
return await db.envelope_list_workspaces.all();
|
|
168
182
|
}
|
|
169
183
|
// workspace.rename — the workspace name is a mutable handle (vs a worker's immutable
|
|
170
|
-
// name, §machine-processes). Mutates workspaces.name only; the UNIQUE constraint is
|
|
184
|
+
// name, {§machine-processes}). Mutates workspaces.name only; the UNIQUE constraint is
|
|
171
185
|
// the real guard against collision (the handler pre-checks for a clean error).
|
|
172
186
|
static async updateWorkspaceName(db, workspaceId, name) {
|
|
173
187
|
const row = await db.envelope_set_workspace_name.get({ id: workspaceId, name });
|
|
174
|
-
if (row === undefined)
|
|
175
|
-
|
|
188
|
+
if (row === undefined) {
|
|
189
|
+
const workspace = await db.envelope_get_workspace.get({ id: workspaceId });
|
|
190
|
+
if (workspace !== undefined) {
|
|
191
|
+
throw envelopeFailure("daemon:workspace", "name-conflict", 409, `Workspace name '${name}' is already in use.`, {
|
|
192
|
+
workspaceId,
|
|
193
|
+
name,
|
|
194
|
+
recovery: "Choose another workspace name.",
|
|
195
|
+
retryable: false,
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
throw envelopeFailure("daemon:workspace", "workspace-not-found", 404, `Workspace ${workspaceId} does not exist.`, { workspaceId });
|
|
199
|
+
}
|
|
176
200
|
return row.name;
|
|
177
201
|
}
|
|
178
202
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/server/envelope.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/server/envelope.ts"],"names":[],"mappings":"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"}
|