@plurnk/plurnk-service 1.3.12 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.defaults +95 -91
- package/INSTALL.md +54 -28
- package/README.md +25 -10
- package/SPEC.md +2426 -942
- package/dist/Paths.d.ts +4 -1
- package/dist/Paths.d.ts.map +1 -1
- package/dist/Paths.js +24 -23
- 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 +4 -3
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/index.js +2 -1
- package/dist/content/index.js.map +1 -1
- package/dist/content/line-marker.d.ts +10 -9
- package/dist/content/line-marker.d.ts.map +1 -1
- package/dist/content/line-marker.js +8 -11
- package/dist/content/line-marker.js.map +1 -1
- package/dist/content/matcher.d.ts +15 -26
- 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-projector.d.ts +14 -0
- package/dist/content/read-projector.d.ts.map +1 -0
- package/dist/content/read-projector.js +86 -0
- package/dist/content/read-projector.js.map +1 -0
- package/dist/content/read-resolve.d.ts +6 -7
- package/dist/content/read-resolve.d.ts.map +1 -1
- package/dist/content/read-resolve.js +36 -59
- package/dist/content/read-resolve.js.map +1 -1
- package/dist/core/BranchReceipt.d.ts +6 -0
- package/dist/core/BranchReceipt.d.ts.map +1 -0
- package/dist/core/BranchReceipt.js +24 -0
- package/dist/core/BranchReceipt.js.map +1 -0
- package/dist/core/BudgetOverflow.d.ts +20 -0
- package/dist/core/BudgetOverflow.d.ts.map +1 -0
- package/dist/core/BudgetOverflow.js +49 -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 +31 -9
- package/dist/core/ChannelWrite.d.ts.map +1 -1
- package/dist/core/ChannelWrite.js +30 -23
- package/dist/core/ChannelWrite.js.map +1 -1
- package/dist/core/ChannelWrite.sql +14 -12
- package/dist/core/CoreSchemeServices.d.ts +18 -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 +26 -21
- package/dist/core/Dispatcher.d.ts.map +1 -1
- package/dist/core/Dispatcher.js +1626 -671
- 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 +64 -29
- package/dist/core/Engine.d.ts.map +1 -1
- package/dist/core/Engine.js +1348 -835
- package/dist/core/Engine.js.map +1 -1
- package/dist/core/Engine.sql +329 -234
- 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 +18 -0
- package/dist/core/LogBody.d.ts.map +1 -0
- package/dist/core/LogBody.js +180 -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 -2
- package/dist/core/LoopLifecycle.d.ts.map +1 -1
- package/dist/core/LoopLifecycle.js +54 -11
- package/dist/core/LoopLifecycle.js.map +1 -1
- package/dist/core/LoopLifecycle.sql +10 -7
- 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 +27 -25
- package/dist/core/PacketBuilder.d.ts.map +1 -1
- package/dist/core/PacketBuilder.js +321 -383
- 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 +6 -3
- package/dist/core/StrikeRail.d.ts.map +1 -1
- package/dist/core/StrikeRail.js +27 -56
- package/dist/core/StrikeRail.js.map +1 -1
- package/dist/core/TerminalResult.d.ts +16 -0
- package/dist/core/TerminalResult.d.ts.map +1 -0
- package/dist/core/TerminalResult.js +49 -0
- package/dist/core/TerminalResult.js.map +1 -0
- 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 +5 -1
- package/dist/core/caps/CapsResolve.d.ts.map +1 -1
- package/dist/core/caps/CapsResolve.js +8 -4
- 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 +30 -12
- package/dist/core/caps/DbChannelCaps.js.map +1 -1
- package/dist/core/caps/DbEntryCaps.d.ts +5 -14
- package/dist/core/caps/DbEntryCaps.d.ts.map +1 -1
- package/dist/core/caps/DbEntryCaps.js +27 -8
- 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 +18 -15
- 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 -6
- package/dist/core/caps/DbSubscriptionCaps.d.ts.map +1 -1
- package/dist/core/caps/DbSubscriptionCaps.js +75 -66
- 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 +20 -11
- package/dist/core/caps/DbTagCaps.js.map +1 -1
- package/dist/core/caps/SchemeCtxImpl.d.ts +6 -1
- package/dist/core/caps/SchemeCtxImpl.d.ts.map +1 -1
- package/dist/core/caps/SchemeCtxImpl.js +6 -6
- package/dist/core/caps/SchemeCtxImpl.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 +43 -29
- 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 +3 -2
- package/dist/core/git-iso.d.ts.map +1 -1
- package/dist/core/git-iso.js +36 -27
- package/dist/core/git-iso.js.map +1 -1
- package/dist/core/git-membership.d.ts +2 -1
- package/dist/core/git-membership.d.ts.map +1 -1
- package/dist/core/git-membership.js +276 -162
- package/dist/core/git-membership.js.map +1 -1
- package/dist/core/git-state.d.ts +8 -1
- package/dist/core/git-state.d.ts.map +1 -1
- package/dist/core/git-state.js +44 -26
- package/dist/core/git-state.js.map +1 -1
- package/dist/core/namespace.d.ts +1 -0
- package/dist/core/namespace.d.ts.map +1 -1
- package/dist/core/namespace.js +20 -0
- package/dist/core/namespace.js.map +1 -1
- package/dist/core/optimistic-settlement.d.ts +2 -0
- package/dist/core/optimistic-settlement.d.ts.map +1 -0
- package/dist/core/optimistic-settlement.js +14 -0
- package/dist/core/optimistic-settlement.js.map +1 -0
- 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 +3 -21
- package/dist/core/packet-wire.d.ts.map +1 -1
- package/dist/core/packet-wire.js +305 -385
- 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 +18 -5
- package/dist/core/results.d.ts.map +1 -1
- package/dist/core/results.js +33 -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 +3 -17
- 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} +14 -14
- 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 +510 -149
- package/dist/digest/Digest.js.map +1 -1
- package/dist/digest/digest.sql +23 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -5
- package/dist/index.js.map +1 -1
- 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 +9 -14
- package/dist/schemes/Exec.d.ts.map +1 -1
- package/dist/schemes/Exec.js +402 -262
- package/dist/schemes/Exec.js.map +1 -1
- package/dist/schemes/ExecOutputScheme.d.ts +9 -9
- package/dist/schemes/ExecOutputScheme.d.ts.map +1 -1
- package/dist/schemes/ExecOutputScheme.js +49 -18
- package/dist/schemes/ExecOutputScheme.js.map +1 -1
- package/dist/schemes/File.d.ts +7 -13
- package/dist/schemes/File.d.ts.map +1 -1
- package/dist/schemes/File.js +280 -151
- package/dist/schemes/File.js.map +1 -1
- package/dist/schemes/Log.d.ts +8 -12
- package/dist/schemes/Log.d.ts.map +1 -1
- package/dist/schemes/Log.js +402 -233
- package/dist/schemes/Log.js.map +1 -1
- package/dist/schemes/Log.sql +71 -32
- package/dist/schemes/Prompt.d.ts +3 -3
- package/dist/schemes/Prompt.d.ts.map +1 -1
- package/dist/schemes/Prompt.js +10 -10
- package/dist/schemes/Prompt.js.map +1 -1
- package/dist/schemes/Skill.d.ts +2 -3
- package/dist/schemes/Skill.d.ts.map +1 -1
- package/dist/schemes/Skill.js +2 -6
- package/dist/schemes/Skill.js.map +1 -1
- package/dist/schemes/Worker.d.ts +11 -19
- package/dist/schemes/Worker.d.ts.map +1 -1
- package/dist/schemes/Worker.js +210 -89
- 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 +11 -9
- package/dist/schemes/_entry-crud.d.ts.map +1 -1
- package/dist/schemes/_entry-crud.js +72 -13
- package/dist/schemes/_entry-crud.js.map +1 -1
- package/dist/schemes/_entry-crud.sql +28 -10
- package/dist/schemes/_entry-find.d.ts +49 -18
- package/dist/schemes/_entry-find.d.ts.map +1 -1
- package/dist/schemes/_entry-find.js +348 -195
- 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 +14 -15
- package/dist/schemes/_entry-ops.d.ts.map +1 -1
- package/dist/schemes/_entry-ops.js +121 -110
- package/dist/schemes/_entry-ops.js.map +1 -1
- package/dist/schemes/_entry-ops.sql +2 -3
- package/dist/schemes/_entry-semantic.d.ts +22 -9
- package/dist/schemes/_entry-semantic.d.ts.map +1 -1
- package/dist/schemes/_entry-semantic.js +127 -67
- 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 +328 -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 +49 -0
- package/dist/server/BranchBatches.d.ts.map +1 -0
- package/dist/server/BranchBatches.js +592 -0
- package/dist/server/BranchBatches.js.map +1 -0
- package/dist/server/Daemon.d.ts +39 -71
- package/dist/server/Daemon.d.ts.map +1 -1
- package/dist/server/Daemon.js +1133 -491
- 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 +154 -0
- package/dist/server/client-input.d.ts +13 -0
- package/dist/server/client-input.d.ts.map +1 -1
- package/dist/server/client-input.js +268 -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 +96 -65
- package/dist/server/envelope.d.ts +4 -7
- package/dist/server/envelope.d.ts.map +1 -1
- package/dist/server/envelope.js +118 -95
- package/dist/server/envelope.js.map +1 -1
- package/dist/server/envelope.sql +18 -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 +112 -2
- package/dist/server/logEntry.d.ts +4 -2
- package/dist/server/logEntry.d.ts.map +1 -1
- package/dist/server/logEntry.js +6 -3
- 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 +79 -61
- package/dist/service.js.map +1 -1
- package/migrations/001_schema.sql +1010 -0
- package/package.json +65 -32
- 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
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { assertEditReceipt, assertResourceEffects, } from "../content/index.js";
|
|
2
|
+
import TerminalResult from "./TerminalResult.js";
|
|
3
|
+
const EMPTY_BODY = Object.freeze({
|
|
4
|
+
content: "",
|
|
5
|
+
mimetype: "text/plain",
|
|
6
|
+
startLine: 1,
|
|
7
|
+
});
|
|
8
|
+
// The durable log row has one canonical body regardless of how it is consumed.
|
|
9
|
+
// Packet rendering projects this body, while READ(log://), FIND(log://), and
|
|
10
|
+
// search derivation consume it complete. Storage envelopes and tx/rx placement
|
|
11
|
+
// are persistence details and must not change what the row means.
|
|
12
|
+
export default class LogBody {
|
|
13
|
+
static #decode(value, mimetype) {
|
|
14
|
+
if (typeof value !== "string" || mimetype !== "application/json")
|
|
15
|
+
return value;
|
|
16
|
+
try {
|
|
17
|
+
return JSON.parse(value);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return value;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
static #contentBody(value, fallbackMimetype) {
|
|
24
|
+
if (value === null || typeof value !== "object")
|
|
25
|
+
return null;
|
|
26
|
+
const body = value;
|
|
27
|
+
if (typeof body.content !== "string")
|
|
28
|
+
return null;
|
|
29
|
+
return {
|
|
30
|
+
content: body.content,
|
|
31
|
+
mimetype: typeof body.mimetype === "string" ? body.mimetype : (fallbackMimetype ?? "text/plain"),
|
|
32
|
+
startLine: body.startLine === null ? null : (typeof body.startLine === "number" ? body.startLine : 1),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
static #receiptBody(receipts) {
|
|
36
|
+
// {§edit-result-receipt-projection} — the canonical row body is the
|
|
37
|
+
// bounded landed context, not the authored mutation text.
|
|
38
|
+
if (receipts.length === 0)
|
|
39
|
+
return EMPTY_BODY;
|
|
40
|
+
return {
|
|
41
|
+
content: receipts
|
|
42
|
+
.map((receipt) => "effect" in receipt
|
|
43
|
+
? receipt.effect.context
|
|
44
|
+
: receipt.replacement?.context ?? "")
|
|
45
|
+
.filter((context) => context.length > 0)
|
|
46
|
+
.join("\n\n"),
|
|
47
|
+
mimetype: "text/plain",
|
|
48
|
+
startLine: null,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
static resolve(row) {
|
|
52
|
+
const attrs = typeof row.attrs === "string"
|
|
53
|
+
? LogBody.#decode(row.attrs, "application/json")
|
|
54
|
+
: row.attrs;
|
|
55
|
+
const tx = LogBody.#decode(row.tx, row.mimetypeTx);
|
|
56
|
+
const rx = LogBody.#decode(row.rx, row.mimetypeRx);
|
|
57
|
+
const contentBody = LogBody.#contentBody(rx, row.mimetypeRx);
|
|
58
|
+
if (row.op === null) {
|
|
59
|
+
if (attrs === null || typeof attrs !== "object" || attrs.kind !== "model_emission") {
|
|
60
|
+
throw new TypeError("An actionless log body must carry attrs.kind=model_emission.");
|
|
61
|
+
}
|
|
62
|
+
return contentBody ?? EMPTY_BODY;
|
|
63
|
+
}
|
|
64
|
+
if (row.op === "READ" || row.op === "FIND" || row.op === "prompt") {
|
|
65
|
+
return contentBody ?? EMPTY_BODY;
|
|
66
|
+
}
|
|
67
|
+
if (row.op === "EDIT") {
|
|
68
|
+
if (rx !== null && typeof rx === "object") {
|
|
69
|
+
const result = rx;
|
|
70
|
+
if (Object.hasOwn(result, "receipt")) {
|
|
71
|
+
return LogBody.#receiptBody([
|
|
72
|
+
assertEditReceipt(result.receipt),
|
|
73
|
+
]);
|
|
74
|
+
}
|
|
75
|
+
if (typeof result.span === "string") {
|
|
76
|
+
return {
|
|
77
|
+
content: result.span,
|
|
78
|
+
mimetype: "text/plain",
|
|
79
|
+
startLine: null,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return EMPTY_BODY;
|
|
84
|
+
}
|
|
85
|
+
if (row.op === "COPY" || row.op === "MOVE") {
|
|
86
|
+
if (rx !== null && typeof rx === "object") {
|
|
87
|
+
const result = rx;
|
|
88
|
+
if (Object.hasOwn(result, "effects")) {
|
|
89
|
+
const receipts = assertResourceEffects(result.effects)
|
|
90
|
+
.flatMap(({ receipt }) => receipt === undefined ? [] : [receipt]);
|
|
91
|
+
return LogBody.#receiptBody(receipts);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return EMPTY_BODY;
|
|
95
|
+
}
|
|
96
|
+
if (row.op === "EXEC" && tx !== null && typeof tx === "object") {
|
|
97
|
+
const body = tx.body;
|
|
98
|
+
if (typeof body === "string") {
|
|
99
|
+
return {
|
|
100
|
+
content: body,
|
|
101
|
+
mimetype: "text/plain",
|
|
102
|
+
startLine: 1,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
if (row.op === "SEND"
|
|
107
|
+
&& attrs !== null
|
|
108
|
+
&& typeof attrs === "object"
|
|
109
|
+
&& !Array.isArray(attrs)
|
|
110
|
+
&& attrs.kind === "loop_termination") {
|
|
111
|
+
const context = attrs;
|
|
112
|
+
if (context.terminatedBy !== undefined && context.terminatedBy !== "cancel") {
|
|
113
|
+
throw new TypeError("A loop-termination log body carries malformed terminal authorship.");
|
|
114
|
+
}
|
|
115
|
+
if (context.receipt !== undefined && typeof context.receipt !== "string") {
|
|
116
|
+
throw new TypeError("A loop-termination log body carries a malformed branch receipt.");
|
|
117
|
+
}
|
|
118
|
+
const exact = TerminalResult.assert(rx, "loop-termination log body");
|
|
119
|
+
const presentation = TerminalResult.present(exact, {
|
|
120
|
+
terminatedBy: context.terminatedBy,
|
|
121
|
+
receipt: context.receipt,
|
|
122
|
+
fallback: `[ worker concluded with no deliverable (status ${exact.status}) ]`,
|
|
123
|
+
});
|
|
124
|
+
if (presentation === null)
|
|
125
|
+
return EMPTY_BODY;
|
|
126
|
+
return { ...presentation, startLine: 1 };
|
|
127
|
+
}
|
|
128
|
+
if (row.op === "PLAN" || row.op === "SEND" || row.op === "WORK" || row.op === "FORK") {
|
|
129
|
+
if (tx !== null && typeof tx === "object") {
|
|
130
|
+
const body = tx.body;
|
|
131
|
+
const content = typeof body === "string"
|
|
132
|
+
? body
|
|
133
|
+
: body !== null && typeof body === "object" && typeof body.raw === "string"
|
|
134
|
+
? body.raw
|
|
135
|
+
: "";
|
|
136
|
+
if (content.length > 0) {
|
|
137
|
+
return {
|
|
138
|
+
content,
|
|
139
|
+
mimetype: "text/plain",
|
|
140
|
+
startLine: 1,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if (row.op === "SEND" && typeof rx === "string" && rx.length > 0) {
|
|
145
|
+
return {
|
|
146
|
+
content: rx,
|
|
147
|
+
mimetype: row.mimetypeRx ?? "text/plain",
|
|
148
|
+
startLine: 1,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
if (row.op === "error" && rx !== null && typeof rx === "object") {
|
|
153
|
+
const message = rx.message;
|
|
154
|
+
if (typeof message === "string" && message.length > 0) {
|
|
155
|
+
return {
|
|
156
|
+
content: message,
|
|
157
|
+
mimetype: "text/plain",
|
|
158
|
+
startLine: 1,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// Extension rows use the same durable result/statement envelopes as
|
|
163
|
+
// built-in operations. Keep the fallback structural so a new producer
|
|
164
|
+
// cannot require a packet-renderer branch merely to expose its body.
|
|
165
|
+
if (contentBody !== null)
|
|
166
|
+
return contentBody;
|
|
167
|
+
if (tx !== null && typeof tx === "object") {
|
|
168
|
+
const body = tx.body;
|
|
169
|
+
if (typeof body === "string" && body.length > 0) {
|
|
170
|
+
return {
|
|
171
|
+
content: body,
|
|
172
|
+
mimetype: row.mimetypeTx ?? "text/plain",
|
|
173
|
+
startLine: 1,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return EMPTY_BODY;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=LogBody.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LogBody.js","sourceRoot":"","sources":["../../src/core/LogBody.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type LoopFlags } from "@plurnk/plurnk-contracts";
|
|
2
|
+
import type { Db } from "./Db.ts";
|
|
3
|
+
export default class LoopFlagsReader {
|
|
4
|
+
static parse(raw: string, loopId: number): LoopFlags;
|
|
5
|
+
static read(db: Db, loopId: number): Promise<LoopFlags>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=LoopFlagsReader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoopFlagsReader.d.ts","sourceRoot":"","sources":["../../src/core/LoopFlagsReader.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,KAAK,SAAS,EACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAIlC,MAAM,CAAC,OAAO,OAAO,eAAe;IAChC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,CAmBnD;IAED,OAAa,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAM5D;CACJ"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { DEFAULT_LOOP_FLAGS, Validator, } from "@plurnk/plurnk-contracts";
|
|
2
|
+
// {§loop-flags-effective-read} — persistence may contain a partial object, but
|
|
3
|
+
// runtime policy is always the complete contracts-owned shape.
|
|
4
|
+
export default class LoopFlagsReader {
|
|
5
|
+
static parse(raw, loopId) {
|
|
6
|
+
let partial;
|
|
7
|
+
try {
|
|
8
|
+
partial = JSON.parse(raw);
|
|
9
|
+
}
|
|
10
|
+
catch (cause) {
|
|
11
|
+
throw new Error(`Loop ${loopId} has invalid persisted flags JSON.`, { cause });
|
|
12
|
+
}
|
|
13
|
+
if (partial === null || typeof partial !== "object" || Array.isArray(partial)) {
|
|
14
|
+
throw new Error(`Loop ${loopId} has invalid persisted flags.`, {
|
|
15
|
+
cause: new TypeError("Persisted loop flags must be a JSON object."),
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
try {
|
|
19
|
+
return Validator.assertLoopFlags({ ...DEFAULT_LOOP_FLAGS, ...partial });
|
|
20
|
+
}
|
|
21
|
+
catch (cause) {
|
|
22
|
+
throw new Error(`Loop ${loopId} has invalid persisted flags.`, { cause });
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
static async read(db, loopId) {
|
|
26
|
+
const row = await db.engine_get_loop_flags.get({ loop_id: loopId });
|
|
27
|
+
if (row === undefined) {
|
|
28
|
+
throw new Error(`Loop ${loopId} does not exist while reading its persisted flags.`);
|
|
29
|
+
}
|
|
30
|
+
return LoopFlagsReader.parse(row.flags, loopId);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=LoopFlagsReader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoopFlagsReader.js","sourceRoot":"","sources":["../../src/core/LoopFlagsReader.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,kBAAkB,EAClB,SAAS,GAEZ,MAAM,0BAA0B,CAAC;AAGlC,+EAA+E;AAC/E,+DAA+D;AAC/D,MAAM,CAAC,OAAO,OAAO,eAAe;IAChC,MAAM,CAAC,KAAK,CAAC,GAAW,EAAE,MAAc;QACpC,IAAI,OAAgB,CAAC;QACrB,IAAI,CAAC;YACD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,QAAQ,MAAM,oCAAoC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACnF,CAAC;QAED,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,QAAQ,MAAM,+BAA+B,EAAE;gBAC3D,KAAK,EAAE,IAAI,SAAS,CAAC,6CAA6C,CAAC;aACtE,CAAC,CAAC;QACP,CAAC;QAED,IAAI,CAAC;YACD,OAAO,SAAS,CAAC,eAAe,CAAC,EAAE,GAAG,kBAAkB,EAAE,GAAG,OAAO,EAAe,CAAC,CAAC;QACzF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,QAAQ,MAAM,+BAA+B,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9E,CAAC;IACL,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAM,EAAE,MAAc;QACpC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,qBAAqB,CAAC,GAAG,CAAoB,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACvF,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,QAAQ,MAAM,oDAAoD,CAAC,CAAC;QACxF,CAAC;QACD,OAAO,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;CACJ"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { Db } from "./Db.ts";
|
|
2
|
+
import { type SchemeResult } from "./results.ts";
|
|
2
3
|
export interface CancelledLoop {
|
|
3
4
|
loopId: number;
|
|
4
5
|
workerId: number;
|
|
6
|
+
result: SchemeResult;
|
|
5
7
|
}
|
|
6
8
|
export interface CancelledTree {
|
|
7
9
|
workerIds: number[];
|
|
@@ -10,10 +12,14 @@ export interface CancelledTree {
|
|
|
10
12
|
export default class LoopLifecycle {
|
|
11
13
|
#private;
|
|
12
14
|
constructor(db: Db);
|
|
13
|
-
|
|
15
|
+
static projectStatus(status: number): number;
|
|
16
|
+
park(loopId: number): Promise<boolean>;
|
|
14
17
|
wake(loopId: number): Promise<boolean>;
|
|
15
|
-
finish(loopId: number,
|
|
18
|
+
finish(loopId: number, result: SchemeResult, options?: {
|
|
19
|
+
terminatedBy?: "cancel" | null;
|
|
20
|
+
}): Promise<SchemeResult | null>;
|
|
16
21
|
status(loopId: number): Promise<number>;
|
|
22
|
+
result(loopId: number): Promise<SchemeResult | null>;
|
|
17
23
|
turnIds(loopId: number): Promise<number[]>;
|
|
18
24
|
cancelTree(workerId: number, reason: string, includeRoot: boolean): Promise<CancelledTree>;
|
|
19
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoopLifecycle.d.ts","sourceRoot":"","sources":["../../src/core/LoopLifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"LoopLifecycle.d.ts","sourceRoot":"","sources":["../../src/core/LoopLifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAClC,OAAgB,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAG1D,MAAM,WAAW,aAAa;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,YAAY,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC1B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED,MAAM,CAAC,OAAO,OAAO,aAAa;;IAG9B,YAAY,EAAE,EAAE,EAAE,EAEjB;IAMD,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQ3C;IAEK,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAI3C;IAEK,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAI3C;IAEK,MAAM,CACR,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE;QAAE,YAAY,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAA;KAAO,GACjD,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAa9B;IAEK,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAM5C;IAEK,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAQzD;IAEK,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAK/C;IAEK,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,CAmC/F;CACJ"}
|
|
@@ -1,12 +1,29 @@
|
|
|
1
|
+
import Results from "./results.js";
|
|
2
|
+
import ErrorDetail from "./ErrorDetail.js";
|
|
1
3
|
export default class LoopLifecycle {
|
|
2
4
|
#db;
|
|
3
5
|
constructor(db) {
|
|
4
6
|
this.#db = db;
|
|
5
7
|
}
|
|
6
|
-
|
|
8
|
+
// `loops.status` is the compact scheduler state inherited by the schema;
|
|
9
|
+
// terminal_result is the lossless product result. Preserve the established
|
|
10
|
+
// terminal classes relationally while retaining an exact uncommon status
|
|
11
|
+
// (for example a provider 502) in terminal_result.
|
|
12
|
+
static projectStatus(status) {
|
|
13
|
+
if (status === 202) {
|
|
14
|
+
throw new TypeError("loop terminal result cannot be 202; 202 is the parked lifecycle state");
|
|
15
|
+
}
|
|
16
|
+
if ([200, 413, 429, 499, 500, 504, 508].includes(status))
|
|
17
|
+
return status;
|
|
18
|
+
if (status >= 200 && status <= 399)
|
|
19
|
+
return 200;
|
|
20
|
+
if (status >= 400 && status <= 599)
|
|
21
|
+
return 500;
|
|
22
|
+
throw new TypeError(`loop terminal result must have status 200 through 599; got ${status}`);
|
|
23
|
+
}
|
|
24
|
+
async park(loopId) {
|
|
7
25
|
return (await this.#db.lifecycle_park_loop.get({
|
|
8
26
|
loop_id: loopId,
|
|
9
|
-
message,
|
|
10
27
|
})) !== undefined;
|
|
11
28
|
}
|
|
12
29
|
async wake(loopId) {
|
|
@@ -14,13 +31,20 @@ export default class LoopLifecycle {
|
|
|
14
31
|
loop_id: loopId,
|
|
15
32
|
})) !== undefined;
|
|
16
33
|
}
|
|
17
|
-
async finish(loopId,
|
|
18
|
-
|
|
34
|
+
async finish(loopId, result, options = {}) {
|
|
35
|
+
const exact = structuredClone(Results.assert(result));
|
|
36
|
+
if (exact.problem !== undefined && exact.problem.instance === undefined) {
|
|
37
|
+
Results.attachInstance(exact, `loop:///${loopId}`);
|
|
38
|
+
}
|
|
39
|
+
const row = await this.#db.lifecycle_finish_loop.get({
|
|
19
40
|
loop_id: loopId,
|
|
20
|
-
status,
|
|
21
|
-
|
|
22
|
-
terminated_by: terminatedBy,
|
|
23
|
-
})
|
|
41
|
+
status: LoopLifecycle.projectStatus(exact.status),
|
|
42
|
+
result: JSON.stringify(exact),
|
|
43
|
+
terminated_by: options.terminatedBy ?? null,
|
|
44
|
+
});
|
|
45
|
+
if (row === undefined)
|
|
46
|
+
return null;
|
|
47
|
+
return Results.assert(JSON.parse(row.terminal_result));
|
|
24
48
|
}
|
|
25
49
|
async status(loopId) {
|
|
26
50
|
const row = await this.#db.lifecycle_loop_status.get({
|
|
@@ -30,6 +54,16 @@ export default class LoopLifecycle {
|
|
|
30
54
|
throw new Error(`loop ${loopId} does not exist`);
|
|
31
55
|
return row.status;
|
|
32
56
|
}
|
|
57
|
+
async result(loopId) {
|
|
58
|
+
const row = await this.#db.lifecycle_loop_status.get({
|
|
59
|
+
loop_id: loopId,
|
|
60
|
+
});
|
|
61
|
+
if (row === undefined)
|
|
62
|
+
throw new Error(`loop ${loopId} does not exist`);
|
|
63
|
+
return row.terminal_result === null
|
|
64
|
+
? null
|
|
65
|
+
: Results.assert(JSON.parse(row.terminal_result));
|
|
66
|
+
}
|
|
33
67
|
async turnIds(loopId) {
|
|
34
68
|
const rows = await this.#db.lifecycle_loop_turns.all({
|
|
35
69
|
loop_id: loopId,
|
|
@@ -37,19 +71,28 @@ export default class LoopLifecycle {
|
|
|
37
71
|
return rows.map(({ id }) => id);
|
|
38
72
|
}
|
|
39
73
|
async cancelTree(workerId, reason, includeRoot) {
|
|
74
|
+
const boundedReason = ErrorDetail.preview(reason) || "no reason was supplied";
|
|
40
75
|
const params = {
|
|
41
76
|
worker_id: workerId,
|
|
42
77
|
include_root: includeRoot ? 1 : 0,
|
|
43
|
-
message: reason.slice(0, 500),
|
|
44
78
|
};
|
|
45
79
|
const workers = await this.#db.lifecycle_worker_tree.all({
|
|
46
80
|
worker_id: params.worker_id,
|
|
47
81
|
include_root: params.include_root,
|
|
48
82
|
});
|
|
49
|
-
const
|
|
83
|
+
const cancellation = Results.failure("lifecycle:cancel", "scope-cancelled", 499, `The worker scope was cancelled: ${boundedReason}.`, {}, {
|
|
84
|
+
reason: boundedReason,
|
|
85
|
+
stage: "loop",
|
|
86
|
+
retryable: false,
|
|
87
|
+
});
|
|
88
|
+
const loops = await this.#db.lifecycle_cancel_worker_tree.all({ ...params, result: JSON.stringify(cancellation) });
|
|
50
89
|
return {
|
|
51
90
|
workerIds: workers.map(({ worker_id }) => worker_id),
|
|
52
|
-
loops: loops.map(({ loop_id, worker_id }) => ({
|
|
91
|
+
loops: loops.map(({ loop_id, worker_id, terminal_result }) => ({
|
|
92
|
+
loopId: loop_id,
|
|
93
|
+
workerId: worker_id,
|
|
94
|
+
result: Results.assert(JSON.parse(terminal_result)),
|
|
95
|
+
})),
|
|
53
96
|
};
|
|
54
97
|
}
|
|
55
98
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoopLifecycle.js","sourceRoot":"","sources":["../../src/core/LoopLifecycle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LoopLifecycle.js","sourceRoot":"","sources":["../../src/core/LoopLifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
-- PREP: lifecycle_park_loop
|
|
5
5
|
UPDATE loops
|
|
6
|
-
SET status = 202
|
|
7
|
-
terminal_message = $message
|
|
6
|
+
SET status = 202
|
|
8
7
|
WHERE id = $loop_id AND status = 102
|
|
9
8
|
RETURNING id;
|
|
10
9
|
|
|
@@ -17,13 +16,13 @@ RETURNING id;
|
|
|
17
16
|
-- PREP: lifecycle_finish_loop
|
|
18
17
|
UPDATE loops
|
|
19
18
|
SET status = $status,
|
|
20
|
-
|
|
19
|
+
terminal_result = $result,
|
|
21
20
|
terminated_by = $terminated_by
|
|
22
21
|
WHERE id = $loop_id AND status IN (100, 102, 202)
|
|
23
|
-
RETURNING
|
|
22
|
+
RETURNING terminal_result;
|
|
24
23
|
|
|
25
24
|
-- PREP: lifecycle_loop_status
|
|
26
|
-
SELECT status FROM loops WHERE id = $loop_id;
|
|
25
|
+
SELECT status, terminal_result FROM loops WHERE id = $loop_id;
|
|
27
26
|
|
|
28
27
|
-- PREP: lifecycle_loop_turns
|
|
29
28
|
SELECT id FROM turns WHERE loop_id = $loop_id ORDER BY sequence, id;
|
|
@@ -51,10 +50,14 @@ WITH RECURSIVE tree(id) AS (
|
|
|
51
50
|
)
|
|
52
51
|
UPDATE loops
|
|
53
52
|
SET status = 499,
|
|
54
|
-
|
|
53
|
+
terminal_result = json_set(
|
|
54
|
+
$result,
|
|
55
|
+
'$.problem.instance',
|
|
56
|
+
'loop:///' || id
|
|
57
|
+
),
|
|
55
58
|
terminated_by = 'cancel'
|
|
56
59
|
WHERE worker_id IN (
|
|
57
60
|
SELECT id FROM tree WHERE $include_root = 1 OR id <> $worker_id
|
|
58
61
|
)
|
|
59
62
|
AND status IN (100, 102, 202)
|
|
60
|
-
RETURNING id AS loop_id, worker_id;
|
|
63
|
+
RETURNING id AS loop_id, worker_id, terminal_result;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type Notice } from "@plurnk/plurnk-contracts";
|
|
2
|
+
import type { NoticeNotify } from "./ChannelWrite.ts";
|
|
3
|
+
export default class NoticeChannel {
|
|
4
|
+
#private;
|
|
5
|
+
constructor({ notify }?: {
|
|
6
|
+
notify?: NoticeNotify;
|
|
7
|
+
});
|
|
8
|
+
push(workspaceId: number, loopId: number, notice: Notice): void;
|
|
9
|
+
notify(workspaceId: number, loopId: number, notice: Notice): void;
|
|
10
|
+
drain(loopId: number): Notice[];
|
|
11
|
+
delete(loopId: number): void;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=NoticeChannel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NoticeChannel.d.ts","sourceRoot":"","sources":["../../src/core/NoticeChannel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAItD,MAAM,CAAC,OAAO,OAAO,aAAa;;IAI9B,YAAY,EAAE,MAAM,EAAE,GAAE;QAAE,MAAM,CAAC,EAAE,YAAY,CAAA;KAAO,EAErD;IAED,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAM9D;IAID,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAGhE;IAGD,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAK9B;IAED,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE3B;CAKJ"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Validator } from "@plurnk/plurnk-contracts";
|
|
2
|
+
// The transient notice channel. Durable operation failures live in log_entries as
|
|
3
|
+
// RFC 9457 Problem Details; this buffer carries progress and diagnostic events only.
|
|
4
|
+
export default class NoticeChannel {
|
|
5
|
+
#buffer = new Map();
|
|
6
|
+
#notify;
|
|
7
|
+
constructor({ notify } = {}) {
|
|
8
|
+
this.#notify = notify;
|
|
9
|
+
}
|
|
10
|
+
push(workspaceId, loopId, notice) {
|
|
11
|
+
NoticeChannel.#assert(notice);
|
|
12
|
+
const existing = this.#buffer.get(loopId);
|
|
13
|
+
if (existing === undefined)
|
|
14
|
+
this.#buffer.set(loopId, [notice]);
|
|
15
|
+
else
|
|
16
|
+
existing.push(notice);
|
|
17
|
+
this.#notify?.(workspaceId, { loopId, notice });
|
|
18
|
+
}
|
|
19
|
+
// Live fan-out ONLY, never buffered — for work with no loop to drain the
|
|
20
|
+
// buffer (e.g. workspace-scope derivation warming, loopId 0).
|
|
21
|
+
notify(workspaceId, loopId, notice) {
|
|
22
|
+
NoticeChannel.#assert(notice);
|
|
23
|
+
this.#notify?.(workspaceId, { loopId, notice });
|
|
24
|
+
}
|
|
25
|
+
// Each observation surfaces in one model packet.
|
|
26
|
+
drain(loopId) {
|
|
27
|
+
const buf = this.#buffer.get(loopId);
|
|
28
|
+
if (buf === undefined)
|
|
29
|
+
return [];
|
|
30
|
+
this.#buffer.delete(loopId);
|
|
31
|
+
return buf;
|
|
32
|
+
}
|
|
33
|
+
delete(loopId) {
|
|
34
|
+
this.#buffer.delete(loopId);
|
|
35
|
+
}
|
|
36
|
+
static #assert(notice) {
|
|
37
|
+
Validator.assertNotice(notice);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=NoticeChannel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NoticeChannel.js","sourceRoot":"","sources":["../../src/core/NoticeChannel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAe,MAAM,0BAA0B,CAAC;AAGlE,kFAAkF;AAClF,qFAAqF;AACrF,MAAM,CAAC,OAAO,OAAO,aAAa;IAC9B,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAC;IACtC,OAAO,CAA2B;IAElC,YAAY,EAAE,MAAM,EAAE,GAA8B,EAAE;QAClD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IAC1B,CAAC;IAED,IAAI,CAAC,WAAmB,EAAE,MAAc,EAAE,MAAc;QACpD,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,QAAQ,KAAK,SAAS;YAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;;YAC1D,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3B,IAAI,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,yEAAyE;IACzE,8DAA8D;IAC9D,MAAM,CAAC,WAAmB,EAAE,MAAc,EAAE,MAAc;QACtD,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,iDAAiD;IACjD,KAAK,CAAC,MAAc;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,OAAO,GAAG,CAAC;IACf,CAAC;IAED,MAAM,CAAC,MAAc;QACjB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,MAAc;QACzB,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;CACJ"}
|
package/dist/core/Owner.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { Db } from "./Db.ts";
|
|
2
2
|
import type { PlurnkSchemeContext } from "./scheme-types.ts";
|
|
3
3
|
export default class Owner {
|
|
4
|
-
static readonly RESERVED: Readonly<Set<string>>;
|
|
5
4
|
static commonsId(db: Db, workspaceId: number): Promise<number>;
|
|
6
5
|
static kernelId(db: Db, workspaceId: number): Promise<number>;
|
|
7
6
|
static resolveStreamOwner(hostname: string | null | undefined, ctx: PlurnkSchemeContext): Promise<number | null>;
|
package/dist/core/Owner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Owner.d.ts","sourceRoot":"","sources":["../../src/core/Owner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAO7D,MAAM,CAAC,OAAO,OAAO,KAAK;
|
|
1
|
+
{"version":3,"file":"Owner.d.ts","sourceRoot":"","sources":["../../src/core/Owner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAO7D,MAAM,CAAC,OAAO,OAAO,KAAK;IAItB,OAAa,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMnE;IAGD,OAAa,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMlE;IAOD,OAAa,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOrH;CACJ"}
|
package/dist/core/Owner.js
CHANGED
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
//
|
|
1
|
+
// {§entry-owner} — every entry is owned by a worker row: the workspace's
|
|
2
2
|
// reserved 'commons' worker for shared content, the spawning worker for capability streams. The
|
|
3
3
|
// owner id is a storage foreign key that NEVER renders into a URI or packet; the model addresses
|
|
4
4
|
// owners by NAME in the authority slot, and an empty authority resolves to the ambient principal
|
|
5
5
|
// (the caller on streams). 'plurnk' (the kernel) and 'commons' are the two reserved rows.
|
|
6
6
|
export default class Owner {
|
|
7
|
-
// Names no client- or model-supplied worker may take: the two reserved rows plus the
|
|
8
|
-
// self-sigil the #527 wave gives worker:// (reserving it now keeps the namespace clean).
|
|
9
|
-
static RESERVED = Object.freeze(new Set(["commons", "plurnk", "~", "self"])); // 'self' joins per grammar's canon — a worker named self would impersonate the ~ idiom
|
|
10
7
|
// The workspace's reserved commons worker — lazily ensured, one per workspace. A real row
|
|
11
8
|
// (never a NULL owner: NULLs are distinct under UNIQUE, so a nullable owner_id would let
|
|
12
9
|
// the shared-content identity fragment into duplicate colliding rows).
|
|
@@ -19,7 +16,7 @@ export default class Owner {
|
|
|
19
16
|
throw new Error("Owner.commonsId: commons worker insert returned no row");
|
|
20
17
|
return created.id;
|
|
21
18
|
}
|
|
22
|
-
// The reserved kernel row — worker://plurnk/, the runtime's own actor (§actor-boundary).
|
|
19
|
+
// The reserved kernel row — worker://plurnk/, the runtime's own actor ({§actor-boundary}).
|
|
23
20
|
static async kernelId(db, workspaceId) {
|
|
24
21
|
const existing = await db.envelope_get_worker_by_name.get({ workspace_id: workspaceId, name: "plurnk" });
|
|
25
22
|
if (existing !== undefined)
|
package/dist/core/Owner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Owner.js","sourceRoot":"","sources":["../../src/core/Owner.ts"],"names":[],"mappings":"AAGA
|
|
1
|
+
{"version":3,"file":"Owner.js","sourceRoot":"","sources":["../../src/core/Owner.ts"],"names":[],"mappings":"AAGA,yEAAyE;AACzE,gGAAgG;AAChG,iGAAiG;AACjG,iGAAiG;AACjG,0FAA0F;AAC1F,MAAM,CAAC,OAAO,OAAO,KAAK;IACtB,0FAA0F;IAC1F,yFAAyF;IACzF,uEAAuE;IACvE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAM,EAAE,WAAmB;QAC9C,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,2BAA2B,CAAC,GAAG,CAAiB,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1H,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,QAAQ,CAAC,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,sBAAsB,CAAC,GAAG,CAAiB,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QACtI,IAAI,OAAO,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QACrG,OAAO,OAAO,CAAC,EAAE,CAAC;IACtB,CAAC;IAED,2FAA2F;IAC3F,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAM,EAAE,WAAmB;QAC7C,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,2BAA2B,CAAC,GAAG,CAAiB,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QACzH,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,QAAQ,CAAC,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,sBAAsB,CAAC,GAAG,CAAiB,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrI,IAAI,OAAO,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QACnG,OAAO,OAAO,CAAC,EAAE,CAAC;IACtB,CAAC;IAED,yFAAyF;IACzF,2FAA2F;IAC3F,wFAAwF;IACxF,yFAAyF;IACzF,kCAAkC;IAClC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,QAAmC,EAAE,GAAwB;QACzF,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE;YAAE,OAAO,GAAG,CAAC,QAAQ,CAAC;QACxF,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,sBAAsB,CAAC,GAAG,CAAiB,EAAE,YAAY,EAAE,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QACzH,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACrC,IAAI,KAAK,CAAC,EAAE,KAAK,GAAG,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC,EAAE,CAAC;QAC/C,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,yBAAyB,CAAC,GAAG,CAAwB,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QACrI,OAAO,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;IACrD,CAAC;CACJ"}
|