@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
package/.env.defaults
CHANGED
|
@@ -10,13 +10,14 @@
|
|
|
10
10
|
# two packages crashes boot naming both. Reader declares: every knob your code reads appears in
|
|
11
11
|
# your file — the floor guarantees it set, so code carries no inline fallback.
|
|
12
12
|
#
|
|
13
|
-
#
|
|
13
|
+
# Source classes (low → high precedence; higher classes win):
|
|
14
14
|
# assembled .env.defaults floor (this file + every installed member's, uniqueness-checked)
|
|
15
15
|
# < ~/.plurnk/.env (your home config — seeded once, yours to keep)
|
|
16
16
|
# < ./.env (per-project, current directory)
|
|
17
17
|
# < --env-file=… / --config=…
|
|
18
18
|
# < shell environment
|
|
19
19
|
# < --<knob> CLI flags (the 1:1 mirror: --service-max-turns <-> PLURNK_SERVICE_MAX_TURNS)
|
|
20
|
+
# Ordering among repeated explicit files is currently unspecified (#84).
|
|
20
21
|
# Feature-flag bools use `=== "1"` exactly, never `=== "true"`. `~/` expands to your home.
|
|
21
22
|
|
|
22
23
|
# --- Storage ---
|
|
@@ -41,31 +42,36 @@ PLURNK_HOST=127.0.0.1
|
|
|
41
42
|
PLURNK_PORT=3044
|
|
42
43
|
|
|
43
44
|
# --- Loop control ---
|
|
45
|
+
# Optional default child-provider alias. Unset = each WORK/FORK child inherits
|
|
46
|
+
# its spawning loop's provider. Clients may override this per top-level loop.
|
|
47
|
+
# PLURNK_MODEL_CHILD=fast
|
|
44
48
|
# Operator turn ceiling. -1 (default) = no cap (loops end via SEND, budget,
|
|
45
49
|
# strikes, or cycle detection). A positive value is an inviolable hard cap a
|
|
46
|
-
#
|
|
50
|
+
# CoreSeam runLoop({maxTurns}) request cannot exceed (min wins).
|
|
47
51
|
PLURNK_SERVICE_MAX_TURNS=-1
|
|
48
52
|
# Per-emission op ceiling. -1 (default) = no cap: every generated op dispatches (a runaway
|
|
49
53
|
# op-loop is a sampler concern, not grounds to drop already-generated work). A positive value
|
|
50
54
|
# is an operator ceiling a client may tighten per workspace via workspace.create settings.maxCommands
|
|
51
55
|
# (min wins), never raise past (#232).
|
|
52
56
|
PLURNK_SERVICE_MAX_COMMANDS=-1
|
|
57
|
+
# Live & demo test harness story timeout (ms) — 10 minutes (600000ms).
|
|
58
|
+
PLURNK_SERVICE_LIVE_TIMEOUT=600000
|
|
53
59
|
# Proposal resolution bound (ms). Empty = a stopped world waits for its human indefinitely;
|
|
54
|
-
#
|
|
60
|
+
# a finite positive value auto-cancels unattended (outcome=timeout). Every other explicit
|
|
61
|
+
# value is invalid and fails at the proposal lifecycle owner.
|
|
55
62
|
PLURNK_SERVICE_PROPOSAL_TIMEOUT_MS=
|
|
56
63
|
# Turn-hold runtimes: while a listed runtime's stream is in flight the cycle pauses (no next
|
|
57
64
|
# turn) until it concludes. Bounded by _HOLD_MS, fail-open at the cap. Empty = no holds.
|
|
58
|
-
# A bare name holds
|
|
59
|
-
#
|
|
65
|
+
# A bare name holds all of that runtime's spawns; `<runtime>:<effect>` holds only
|
|
66
|
+
# that effect class.
|
|
60
67
|
PLURNK_SERVICE_EXEC_HOLD=search,images,videos,news,map,music,it,science,social,downloadable
|
|
61
68
|
PLURNK_SERVICE_EXEC_HOLD_MS=300000
|
|
62
|
-
#
|
|
63
|
-
#
|
|
64
|
-
#
|
|
65
|
-
#
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
# Exec poll backoff (#521, §exec-poll): a parked exec with NO explicit `<,P>` cadence is no longer
|
|
69
|
+
# Optimistic worker settlement: before model dispatch, allow newly started
|
|
70
|
+
# streams or a completion wake with live siblings this many ms to quiesce.
|
|
71
|
+
# Settlement ends immediately at quiescence and never extends its first
|
|
72
|
+
# deadline; survivors follow the monitored lifecycle. 0 = off.
|
|
73
|
+
PLURNK_SERVICE_OPTIMISTIC_WAIT_MS=5000
|
|
74
|
+
# Exec poll backoff (#521, {§exec-poll}): a parked exec with NO explicit `<,P>` cadence is no longer
|
|
69
75
|
# park-blind-forever — the loop wakes on an exponential backoff so the model regains a turn to read
|
|
70
76
|
# partial output and re-park a slow long-runner or KILL a stuck one. Wake N fires at BASE·2^min(N,TURNS-1)
|
|
71
77
|
# seconds (60,120,240,…,7680), then holds at the cap. An explicit `<,P>` wins; `<,0>` opts out (blind).
|
|
@@ -88,9 +94,20 @@ PLURNK_SERVICE_LOOP_TIMEOUT=86400000
|
|
|
88
94
|
# PLURNK_QUESTIONS=0
|
|
89
95
|
|
|
90
96
|
# --- Engine rails ---
|
|
97
|
+
# Maximum characters retained from caught runtime diagnostics in a model-facing
|
|
98
|
+
# Problem detail. Complete errors remain in daemon diagnostics.
|
|
99
|
+
PLURNK_SERVICE_ERROR_DETAIL_LIMIT=512
|
|
91
100
|
PLURNK_SERVICE_MAX_STRIKES=3
|
|
101
|
+
# Completed responses that do not form a valid PLAN...SEND turn are retried
|
|
102
|
+
# beneath the same engine turn and against the identical packet.
|
|
103
|
+
PLURNK_SERVICE_EMISSION_ATTEMPTS=3
|
|
92
104
|
PLURNK_SERVICE_MIN_CYCLES=3
|
|
93
105
|
PLURNK_SERVICE_MAX_CYCLE_PERIOD=4
|
|
106
|
+
# Requiem is an out-of-band forensic interview. Reasoning-heavy witnesses may
|
|
107
|
+
# consume most of the first budget before emitting testimony; an empty
|
|
108
|
+
# length-limited response receives the retry budget.
|
|
109
|
+
PLURNK_SERVICE_REQUIEM_MAX_TOKENS=16384
|
|
110
|
+
PLURNK_SERVICE_REQUIEM_RETRY_MAX_TOKENS=32768
|
|
94
111
|
|
|
95
112
|
# --- Schemes ---
|
|
96
113
|
# (Workspace root for file ops is per-workspace — supplied at
|
|
@@ -98,47 +115,46 @@ PLURNK_SERVICE_MAX_CYCLE_PERIOD=4
|
|
|
98
115
|
# stored on workspaces.project_root. No env-level default.)
|
|
99
116
|
|
|
100
117
|
# --- Git integration ---
|
|
101
|
-
# PLURNK_SERVICE_GIT_ALLOWED — hard ceiling for
|
|
102
|
-
# EXEC[git]). =1 permits it (then
|
|
118
|
+
# PLURNK_SERVICE_GIT_ALLOWED — hard ceiling for Git membership + integration (repository
|
|
119
|
+
# telemetry, EXEC[git]). =1 permits it (then project repository + workspace config decide; a client
|
|
103
120
|
# may deny its own workspace via workspace.create settings.git:false, #232); =0 flatly
|
|
104
121
|
# denies it service-wide, un-re-enableable (the sandbox/benchmark lockout).
|
|
105
122
|
PLURNK_SERVICE_GIT_ALLOWED=1
|
|
106
|
-
# PLURNK_SERVICE_GIT_AUTO —
|
|
107
|
-
#
|
|
108
|
-
# repos explicitly via the `repo` overlay. SPEC §membership forest.
|
|
123
|
+
# PLURNK_SERVICE_GIT_AUTO — automatic project-repository membership. =1 includes the Git
|
|
124
|
+
# repository containing project_root; =0 leaves `pick` as the only membership source.
|
|
109
125
|
PLURNK_SERVICE_GIT_AUTO=1
|
|
110
|
-
#
|
|
111
|
-
#
|
|
112
|
-
#
|
|
113
|
-
|
|
114
|
-
#
|
|
115
|
-
|
|
126
|
+
# PLURNK_SERVICE_GIT_ISO - git READ backend. Default (0) uses the native Git
|
|
127
|
+
# binary. =1 explicitly selects the slower, in-process isomorphic-git backend
|
|
128
|
+
# for a deployment that cannot spawn Git. The two backends never fail over.
|
|
129
|
+
PLURNK_SERVICE_GIT_ISO=0
|
|
130
|
+
# Maximum stdout/stderr payload accepted from one native Git subprocess. The
|
|
131
|
+
# optional in-process reader does not use this bound.
|
|
132
|
+
PLURNK_SERVICE_GIT_OUTPUT_MAX_BYTES=67108864
|
|
116
133
|
|
|
117
|
-
#
|
|
118
|
-
#
|
|
119
|
-
#
|
|
120
|
-
#
|
|
121
|
-
|
|
122
|
-
|
|
134
|
+
# Ordinary bounded OPEN-body projection. READ/FIND results render their selected
|
|
135
|
+
# operation result complete; every other log body renders at most these
|
|
136
|
+
# independent line and character bounds. A truncated body carries its canonical
|
|
137
|
+
# log URI.
|
|
138
|
+
PLURNK_SERVICE_PREVIEW_LINES=16
|
|
139
|
+
PLURNK_SERVICE_PREVIEW_CHARS=2560
|
|
123
140
|
|
|
124
|
-
# --- Reference docs (auto-READ at turn
|
|
125
|
-
# PLURNK_SERVICE_MD_<ALIAS>=<path> materializes <path>'s markdown as a
|
|
141
|
+
# --- Reference docs (auto-READ at turn 0) ---
|
|
142
|
+
# PLURNK_SERVICE_MD_<ALIAS>=<path> materializes <path>'s markdown as a
|
|
143
|
+
# worker://plurnk/<ALIAS>.md
|
|
126
144
|
# entry the model READs at turn 0 — an idiomatic way to inject standing context
|
|
127
145
|
# (an ordinary entry + READ op, not a bespoke packet section). ~ expands to home;
|
|
128
146
|
# relative paths resolve against the package root. A client may add its own docs
|
|
129
147
|
# per workspace via workspace.create settings.mdDocs (content, not a path); those UNION
|
|
130
148
|
# with these env docs, keyed by alias — the client wins a collision (#231).
|
|
131
149
|
# Commented out = no docs by default. (The operating policy is NOT a doc: readSystemPolicy
|
|
132
|
-
# already renders ~/.plurnk/AGENTS.md as the ##
|
|
150
|
+
# already renders ~/.plurnk/AGENTS.md as the ## Policy section — pointing a
|
|
133
151
|
# PLURNK_SERVICE_MD_* alias at it injects the same file twice.)
|
|
134
|
-
# Turn-0 catalog preview
|
|
135
|
-
#
|
|
136
|
-
#
|
|
137
|
-
#
|
|
138
|
-
#
|
|
139
|
-
#
|
|
140
|
-
# FINDs on demand). Servicewide default; a client overrides per workspace via workspace.create
|
|
141
|
-
# settings.filesItems (#231).
|
|
152
|
+
# Turn-0 catalog preview so a run opens oriented, not blank. Folder-capable schemes use
|
|
153
|
+
# FIND(<scheme>:///*): direct entries plus exact dir/** summaries carrying each subtree's
|
|
154
|
+
# recursive item and token counts. Curated kernel docs remain recursive, demonstrating both
|
|
155
|
+
# navigation forms. -1 = each ordinary FIND's markerless first page; N = an explicit first-N
|
|
156
|
+
# project-file page (other schemes remain markerless); 0 = preview off. Service-wide default;
|
|
157
|
+
# a client overrides per workspace through workspace.create settings.filesItems (#231).
|
|
142
158
|
PLURNK_SERVICE_FILES_ITEMS=-1
|
|
143
159
|
|
|
144
160
|
# Number of full SHA-256 revision characters rendered on each model-facing
|
|
@@ -146,6 +162,10 @@ PLURNK_SERVICE_FILES_ITEMS=-1
|
|
|
146
162
|
# abbreviation is display correlation only, never identity or comparison.
|
|
147
163
|
PLURNK_SERVICE_EDIT_RECEIPT_REVISION_CHARS=8
|
|
148
164
|
|
|
165
|
+
# Number of Git commit characters rendered in model-facing branch receipts.
|
|
166
|
+
# The durable batch retains complete commit ids; this is display-only.
|
|
167
|
+
PLURNK_SERVICE_BRANCH_RECEIPT_REVISION_CHARS=8
|
|
168
|
+
|
|
149
169
|
# Number of neighboring lines (or top-level JSON items) rendered on each side
|
|
150
170
|
# of an EDIT's resulting range. The model can READ for arbitrary final content.
|
|
151
171
|
PLURNK_SERVICE_EDIT_RECEIPT_CONTEXT_LINES=2
|
|
@@ -156,54 +176,34 @@ PLURNK_SERVICE_EDIT_RECEIPT_CONTEXT_LINES=2
|
|
|
156
176
|
# the ceiling fails hard (508 — no queue, no retry); the acting run counts itself.
|
|
157
177
|
PLURNK_SERVICE_WORKSPACE_WORKERS_MAX_ACTIVE=-1
|
|
158
178
|
|
|
159
|
-
# ---
|
|
160
|
-
#
|
|
161
|
-
#
|
|
162
|
-
# envelope (max_tokens on every call — no decode is unbounded); SAFETY covers chat-template
|
|
163
|
-
# overhead. The prompt ceiling is DERIVED, never set directly.
|
|
179
|
+
# --- Prompt budget and packing safety — PER ALIAS (#352) ---
|
|
180
|
+
# Providers report physical context and response capacity. Core's natural prompt budget is the
|
|
181
|
+
# remaining physical input room after the response envelope and SAFETY margin.
|
|
164
182
|
#
|
|
165
|
-
#
|
|
166
|
-
# provider
|
|
167
|
-
#
|
|
168
|
-
#
|
|
169
|
-
# own packing margin (a service fact, not a model fact). Resolves per alias: _<alias> wins over bare.
|
|
183
|
+
# PROMPT_BUDGET is optional virtual pressure: it makes the model-facing gauge and grinder enforce
|
|
184
|
+
# a smaller input budget without changing provider context or generation settings. Unset uses the
|
|
185
|
+
# natural physical prompt budget; a set value can only tighten it. Both core knobs resolve per
|
|
186
|
+
# alias: _<alias> wins over bare.
|
|
170
187
|
# The retired PLURNK_SERVICE_{CONTEXT_WINDOW,REASONING,COMPLETION} names FAIL HARD at boot naming
|
|
171
188
|
# their successors — a stale .env never silently loses its envelope.
|
|
189
|
+
# PLURNK_SERVICE_PROMPT_BUDGET=128000
|
|
172
190
|
PLURNK_SERVICE_SAFETY=1024
|
|
173
191
|
#
|
|
174
|
-
# PLURNK_SERVICE_BUDGET_MERMAID — the Budget section as visual mermaid (#440, §budget-mermaid). Default
|
|
175
|
-
# `on`: the ceiling/usage/free headline PLUS three budget-scaled diagrams (turn-composition treemap,
|
|
176
|
-
# heaviest-items xychart, used/free pie) — budget-awareness at a glance, and the pie doubles as a
|
|
177
|
-
# training exemplar for the model's own user-facing SENDs. Validated to render on GitHub. Set `off` to
|
|
178
|
-
# A/B against the tabular baseline (#440's before/after measurement).
|
|
179
|
-
PLURNK_SERVICE_BUDGET_MERMAID=on
|
|
180
|
-
#
|
|
181
192
|
# LOCAL aliases (llama-server): the window is PROBED and the reserves DERIVE from it in the
|
|
182
193
|
# provider tier (percent defaults) — zero-config. Absolute pins, when wanted, are provider-tier:
|
|
183
194
|
# PLURNK_PROVIDERS_{REASONING,COMPLETION}_RESERVE_<alias> (see plurnk-providers/.env.defaults).
|
|
184
|
-
#
|
|
185
|
-
#
|
|
186
|
-
#
|
|
187
|
-
# detected window fail HARD at build time, naming the provider-tier knobs.
|
|
188
|
-
|
|
189
|
-
# PLURNK_SERVICE_VERSION_POLL_TTL — how long (ms) discover caches its npm-registry version poll
|
|
190
|
-
# (service + client `latest`) before a background refresh. Best-effort; the poll never
|
|
191
|
-
# blocks discover, and offline/registry-down omits `latest`. ~hourly is plenty. #235
|
|
192
|
-
PLURNK_SERVICE_VERSION_POLL_TTL=3600000
|
|
193
|
-
# Grammar-constrained sampling: SELECTS the GBNF variant the provider constrains every
|
|
194
|
-
# generate() to, so capable backends can only sample valid plurnk DSL. A bare name
|
|
195
|
-
# (plurnk.gbnf) is a variant shipped by @plurnk/plurnk-grammar; a path is your own; =0
|
|
196
|
-
# (or empty) disables.
|
|
197
|
-
#
|
|
198
|
-
|
|
195
|
+
# The provider sends the resolved reasoning allowance per request; no llama-server launch-flag
|
|
196
|
+
# synchronization is required. Pinned absolutes exceeding the detected window fail HARD at build
|
|
197
|
+
# time, naming the provider-tier knobs.
|
|
199
198
|
|
|
200
199
|
# --- Plugins (third-party trust) ---
|
|
201
|
-
# (PLURNK_PLUGINS_TRUSTED_ONLY
|
|
200
|
+
# (PLURNK_PLUGINS_TRUSTED_ONLY lives in @plurnk/plurnk-meta — reader-declares: the
|
|
202
201
|
# trust rule's one implementation lives there and so does its knob.)
|
|
203
202
|
|
|
204
203
|
# PLURNK_SERVICE_DOCS_EXCLUDE — comma list of scheme/exec names dropped from BOTH the teaching oneliner
|
|
205
|
-
# and the materialized pull-doc on load. The
|
|
206
|
-
#
|
|
204
|
+
# and the materialized pull-doc on load. The default names are omitted from this generic
|
|
205
|
+
# catalogue because their teaching is owned elsewhere. Empty → exclude nothing. Unknown names
|
|
206
|
+
# are inert (a filter, not a contract).
|
|
207
207
|
PLURNK_SERVICE_DOCS_EXCLUDE="plurnk,file,exec"
|
|
208
208
|
|
|
209
209
|
# PLURNK_SERVICE_PACKET_INJECT — an operator markdown file injected as a section right after the teaching
|
|
@@ -211,23 +211,20 @@ PLURNK_SERVICE_DOCS_EXCLUDE="plurnk,file,exec"
|
|
|
211
211
|
# `~/` expands to home. Unset → no section. The pressure valve for "improve the packet" without a fork.
|
|
212
212
|
# PLURNK_SERVICE_PACKET_INJECT="~/injection.md"
|
|
213
213
|
|
|
214
|
-
# PLURNK_SERVICE_POLICY — the operating-policy markdown, rendered as the ##
|
|
214
|
+
# PLURNK_SERVICE_POLICY — the operating-policy markdown, rendered as the ## Policy
|
|
215
215
|
# section. Unset = the seeded ~/.plurnk/AGENTS.md; a path = that file; EXPLICITLY empty = policy off.
|
|
216
216
|
# PLURNK_SERVICE_POLICY=
|
|
217
217
|
# PLURNK_SERVICE_PROJECT — a per-project policy markdown (relative to projectRoot). Unset = <root>/AGENTS.md.
|
|
218
218
|
# PLURNK_SERVICE_PROJECT=
|
|
219
|
-
# PLURNK_SERVICE_REQUIREMENTS —
|
|
220
|
-
#
|
|
219
|
+
# PLURNK_SERVICE_REQUIREMENTS — Recap source override (relative to the package root).
|
|
220
|
+
# Unset = the packaged requirements.md.
|
|
221
221
|
# PLURNK_SERVICE_REQUIREMENTS=
|
|
222
222
|
|
|
223
223
|
# --- Semantic search (~query chunking) ---
|
|
224
|
-
# Project Semantics tiles each entry into <=window chunks so a large
|
|
225
|
-
# searchable, not truncated.
|
|
226
|
-
#
|
|
227
|
-
# only when
|
|
228
|
-
# Ranked results returned by a markerless `FIND(...):~query:FIND`. A positive
|
|
229
|
-
# integer `<K>` overrides this count; a decimal marker selects by similarity.
|
|
230
|
-
PLURNK_SERVICE_SEMANTIC_TOP_K=10
|
|
224
|
+
# Project Semantics tiles each vector-eligible entry into <=window chunks so a large
|
|
225
|
+
# body is fully searchable, not truncated. Chunking requires the embedder's exact
|
|
226
|
+
# counter or an exact fallback tokenizer; an estimate refuses semantic derivation.
|
|
227
|
+
# The chunk knobs are read only when an embedder declares its input window.
|
|
231
228
|
# Chunk budget in TOKENS. EMPTY (the default) = the installed embedder's reported
|
|
232
229
|
# window — NO model-specific number is assumed, so it scales to whatever embedder you
|
|
233
230
|
# install. Set a positive value ONLY to cap below the window (e.g. to sweep
|
|
@@ -241,20 +238,27 @@ PLURNK_SERVICE_SEMANTIC_CHUNK_OVERLAP=0.15
|
|
|
241
238
|
PLURNK_SERVICE_MAX_EMBED_SIZE=0
|
|
242
239
|
# =1 forces the FTS-only path even with the embeddings package installed — the ~query
|
|
243
240
|
# degrades to keyword ranking and no vectors are derived (no MiniLM pool spun up). For
|
|
244
|
-
# hosts/runs that don't want vector search; the
|
|
241
|
+
# hosts/runs that don't want vector search; the Mock bootstrap and constrained benchmarks set it.
|
|
245
242
|
PLURNK_SERVICE_EMBED_DISABLE=0
|
|
246
243
|
|
|
247
244
|
# Which exec runtimes the search gate treats as searches — the per-turn cap and identical-query
|
|
248
|
-
# dedup apply to these (the search family delegates page fetches to the entry() sink; §exec-entry-sink).
|
|
245
|
+
# dedup apply to these (the search family delegates page fetches to the entry() sink; {§exec-entry-sink}).
|
|
249
246
|
PLURNK_SERVICE_SEARCH_RUNTIMES=search
|
|
250
247
|
# Per-turn search flood cap: the (N+1)th search EXEC in one turn is refused 429 (dedup of
|
|
251
248
|
# identical queries is unconditional and separate — it strikes and serves the prior results).
|
|
252
249
|
PLURNK_SERVICE_SEARCH_MAX_PER_TURN=3
|
|
253
|
-
#
|
|
254
|
-
#
|
|
255
|
-
#
|
|
256
|
-
|
|
250
|
+
# Comma-separated file pathname patterns omitted from search derivations. Content remains directly
|
|
251
|
+
# readable. Patterns without `/` match the basename; patterns with `/` match the full pathname.
|
|
252
|
+
# Uses body-matcher glob syntax; the first match is the observable exclusion reason. Empty = none.
|
|
253
|
+
PLURNK_SERVICE_SEARCH_EXCLUDE=*.min.*,*.map,package-lock.json,npm-shrinkwrap.json,packages.lock.json,yarn.lock,pnpm-lock.yaml,bun.lockb,Cargo.lock,poetry.lock,uv.lock,Pipfile.lock,Gemfile.lock,composer.lock,go.sum,flake.lock,gradle.lockfile,*/dist/*,dist/*,*/build/*,build/*,*/.next/*,.next/*,*/node_modules/*,node_modules/*,*/vendor/*,vendor/*,*/coverage/*,coverage/*,*/.vuepress/*,.vuepress/*,*/.nuxt/*,.nuxt/*
|
|
257
254
|
# Derivation producer concurrency: how many entries may materialize graphs/chunk plans at once.
|
|
258
255
|
# Unset uses a host-relative square-root fan-out; the separate embedding pool uses the available
|
|
259
256
|
# cores. A positive integer is an exact operator budget; -1 explicitly claims every available core.
|
|
260
257
|
PLURNK_SERVICE_DERIVE_CONCURRENCY=
|
|
258
|
+
# Maximum symbol or reference rows written by one search-index SQLite statement.
|
|
259
|
+
PLURNK_SERVICE_DERIVE_STORE_BATCH=1024
|
|
260
|
+
# Approximate number of aggregate progress milestones emitted during a multi-item
|
|
261
|
+
# indexing pass. This also controls per-item embedding milestones.
|
|
262
|
+
PLURNK_SERVICE_DERIVE_PROGRESS_STEPS=10
|
|
263
|
+
# Minimum interval between progress notices from a long-running individual item.
|
|
264
|
+
PLURNK_SERVICE_DERIVE_PROGRESS_HEARTBEAT_MS=5000
|
package/INSTALL.md
CHANGED
|
@@ -1,54 +1,69 @@
|
|
|
1
1
|
# Configuring plurnk-service
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Operator guide. Put machine-specific choices in `~/.plurnk/.env`. Each installed package's `.env.defaults` is the authoritative list and floor for the knobs that package owns; the daemon assembles those files into the read-only `~/.plurnk/.env.defaults` catalog on every boot.
|
|
4
4
|
|
|
5
5
|
## Install
|
|
6
6
|
|
|
7
7
|
```
|
|
8
8
|
npm install -g @plurnk/plurnk-service
|
|
9
|
-
plurnk-service
|
|
9
|
+
plurnk-service migrate # apply the disposable version-1 schema baseline
|
|
10
|
+
plurnk-service start
|
|
10
11
|
```
|
|
11
12
|
|
|
12
|
-
First
|
|
13
|
+
First start creates `~/.plurnk/`: `.env` (yours, seeded once with a model picker — **edit this**), `AGENTS.md` (the operating policy, yours), `.env.defaults` + `INSTALL.md` (package-owned references, **refreshed every boot** — never edit them). No model ships active; the daemon can boot without one, but model loops fail until `PLURNK_MODEL` selects a declared alias.
|
|
13
14
|
|
|
14
|
-
|
|
15
|
+
The default service includes local embeddings. An explicitly disabled or unavailable embedder makes `~query` fall back to FTS keyword ranking. Set `PLURNK_MIMETYPES_EMBED_BASE_URL` to use a remote OpenAI-compatible embedding endpoint instead.
|
|
15
16
|
|
|
16
17
|
## The cascade (where a value actually comes from)
|
|
17
18
|
|
|
18
|
-
|
|
19
|
+
Higher-priority source classes override lower ones ({§operator-config-precedence}):
|
|
19
20
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
21
|
+
| Priority | Source | Role |
|
|
22
|
+
|---------:|----------------------------------------|--------------------------------------------------------------------------------------------|
|
|
23
|
+
| 1 | Installed packages' assembled defaults | Versioned floor; one owner per key. A collision fails boot naming both owners. |
|
|
24
|
+
| 2 | `~/.plurnk/.env` | User configuration, seeded once and never overwritten. **Write generated config here.** |
|
|
25
|
+
| 3 | `./.env` | Configuration for the current working directory. |
|
|
26
|
+
| 4 | `--config=<path>` | One explicit service configuration file. |
|
|
27
|
+
| 5 | `--env-file*` | Repeatable explicit files; later files win. The `-if-exists` form skips absent files. |
|
|
28
|
+
| 6 | Shell environment | Process-level operator values. |
|
|
29
|
+
| 7 | `--<flag>` | Highest-priority service CLI value. |
|
|
27
30
|
|
|
28
|
-
CLI
|
|
31
|
+
`~/.plurnk/.env.defaults` is the regenerated assembled catalog, not another input layer. The service CLI mirrors only the `PLURNK_*` variables declared by the service package's own `.env.defaults`: strip `PLURNK_`, lowercase, and replace `_` with `-` (`PLURNK_SERVICE_MAX_TURNS` ↔ `--service-max-turns`). Installed plugin knobs remain available through env/config files and the assembled catalog without implicitly expanding the service executable's CLI ({§operator-config-cli-flags}). Feature-flag booleans use `1`, not `true`; `~/` expands to home.
|
|
29
32
|
|
|
30
33
|
## The prefix law (who owns a flag)
|
|
31
34
|
|
|
32
|
-
|
|
35
|
+
Family prefixes identify the semantic owner: `PLURNK_SERVICE_*` (this daemon), `PLURNK_PROVIDERS_*`, `PLURNK_MIMETYPES_*`, `PLURNK_EXECS_*`, `PLURNK_SCHEMES_HTTP_*`, `PLURNK_AGUI_*` (the AG-UI module), and `PLURNK_CLIENT_*` (the CLI). Bare `PLURNK_*` names are reserved for front-door or cross-family concepts such as model aliases, endpoint binding, and plugin trust. Even a cross-family key has one physical reader and one `.env.defaults` owner; “shared” never means duplicate implementations. Vendor keys (`OPENAI_API_KEY`, `FIREWORKS_API_KEY`, and peers) retain their vendor conventions.
|
|
33
36
|
|
|
34
|
-
|
|
37
|
+
When a value is required, an unset or retired name fails boot naming the violated key rather than selecting a silent default.
|
|
35
38
|
|
|
36
39
|
## Couplings (the edges an agent gets wrong)
|
|
37
40
|
|
|
38
41
|
These are relationships *between* flags. Set them as a unit.
|
|
39
42
|
|
|
40
|
-
- **
|
|
41
|
-
|
|
43
|
+
- **Provider capacity and PLURNK pressure are separate.** Providers report
|
|
44
|
+
physical context and response capacity. Core derives the natural input
|
|
45
|
+
budget from those facts. Optional `PLURNK_SERVICE_PROMPT_BUDGET_<alias>`
|
|
46
|
+
only tightens the model-facing gauge and grinder; it is never sent to the
|
|
47
|
+
provider and never changes generation settings.
|
|
48
|
+
- **Reasoning capacity is request-scoped on llama-server.**
|
|
49
|
+
`PLURNK_PROVIDERS_REASONING_RESERVE_<alias>` is the adaptive cumulative
|
|
50
|
+
response allowance. An explicit `PLURNK_PROVIDERS_REASONING_BUDGET_<alias>`
|
|
51
|
+
may tighten but cannot exceed it. The provider sends the allowance on every
|
|
52
|
+
request; no serving-box flag synchronization is required.
|
|
42
53
|
- **Local GBNF is optional.** The PLURNK language is always parsed normally.
|
|
43
54
|
Local llama-server users may set `PLURNK_PROVIDERS_GBNF_<alias>`; transport
|
|
44
55
|
and enforcement are verified at boot. Cloud and endpoint-managed aliases
|
|
45
|
-
leave it unset.
|
|
46
|
-
|
|
47
|
-
|
|
56
|
+
leave it unset. A configured PLURNK rail requires reasoning `adaptive` or
|
|
57
|
+
`on`; pairing it with `off` is invalid. Pin
|
|
58
|
+
`PLURNK_PROVIDERS_LLAMA_SERVER_<alias>=1` only when a llama-server cannot be
|
|
59
|
+
fingerprinted reliably.
|
|
60
|
+
- **A reasoning model must reason somewhere.**
|
|
61
|
+
`PLURNK_PROVIDERS_REASONING_<alias>` selects `off`, `adaptive`, or `on`.
|
|
62
|
+
An explicit `on` also requires a positive provider reasoning budget.
|
|
48
63
|
|
|
49
64
|
## Profiles (examples, not a decision tree — adapt to the real box)
|
|
50
65
|
|
|
51
|
-
- **Local GPU (llama-server).** `PLURNK_MODEL_local="openai/<name>"`, `OPENAI_BASE_URL=http://127.0.0.1:<port>`, `PLURNK_MODEL=local`, `
|
|
66
|
+
- **Local GPU (llama-server).** `PLURNK_MODEL_local="openai/<name>"`, `OPENAI_BASE_URL=http://127.0.0.1:<port>`, `PLURNK_MODEL=local`, `PLURNK_PROVIDERS_GBNF_local=plurnk.gbnf`. The provider detects llama-server, verifies its GBNF transport, and derives a request-scoped reasoning allowance from the detected window. Add `PLURNK_PROVIDERS_LLAMA_SERVER_local=1` only when the endpoint cannot be fingerprinted reliably.
|
|
52
67
|
- **Cloud, bring-your-own-key.** `PLURNK_MODEL_cloud="openrouter/<model>"`, `OPENROUTER_API_KEY=…`, `PLURNK_MODEL=cloud`. No local GBNF or `LLAMA_SERVER` pin.
|
|
53
68
|
- **plurnk.ai endpoint.** `PLURNK_MODEL_plurnk="plurnk/plurnk"`, `PLURNK_API_KEY=…`, `PLURNK_MODEL=plurnk`.
|
|
54
69
|
- **Headless / CI / constrained container.** A CPU-only box should NOT disable semantic search — it should point derivation at a real embedder: `PLURNK_MIMETYPES_EMBED_BASE_URL` (any OpenAI-compatible `/v1/embeddings` — a host GPU turns a CPU-hours corpus grind into seconds). Weak hardware is the target workload, not a reason to shed capability; `PLURNK_SERVICE_EMBED_DISABLE=1` exists for test lanes that deterministically assert non-semantic behavior, nothing else. Consider `PLURNK_SERVICE_MAX_TURNS=<n>` as a cost cap, `PLURNK_SERVICE_GIT_ALLOWED=0` to lock out git in a sandbox.
|
|
@@ -59,17 +74,28 @@ Each mirrors a `# --- section ---` in the floor; consult the floor for exact def
|
|
|
59
74
|
|
|
60
75
|
- **Storage** — `PLURNK_SERVICE_DB_PATH`, and the optional `PLURNK_SERVICE_SQLITE_*` passthroughs (sqlrite already sets a safe WAL posture; tune only for a hot/large DB).
|
|
61
76
|
- **Daemon transport** — bare `PLURNK_HOST`/`PLURNK_PORT`: THE client surface (the AG-UI+ listener, bound by the plurnk-agui module at boot). Production is single-listener; every first-party client rides it.
|
|
62
|
-
- **Model aliases** — bare `PLURNK_MODEL` selects the active provider; `PLURNK_MODEL_<alias>` defines one; `PLURNK_BASEURL_<alias>` overrides its endpoint. The front door — keep these bare and short.
|
|
63
|
-
- **Loop control /
|
|
77
|
+
- **Model aliases** — bare `PLURNK_MODEL` selects the active provider; `PLURNK_MODEL_<alias>` defines one; `PLURNK_BASEURL_<alias>` overrides its endpoint. Optional `PLURNK_MODEL_CHILD=<alias>` selects WORK/FORK descendants; unset inherits the spawning loop's provider. The front door — keep these bare and short.
|
|
78
|
+
- **Loop control / engine rails** — `PLURNK_SERVICE_MAX_TURNS` (−1 = uncapped), `_MAX_COMMANDS`, `_MAX_STRIKES`, `_EMISSION_ATTEMPTS`, `_MIN_CYCLES`, `_MAX_CYCLE_PERIOD`, `_LOOP_TIMEOUT`, `_PROPOSAL_TIMEOUT_MS`, `_EXEC_HOLD`, `_OPTIMISTIC_WAIT_MS`, `_EXEC_POLL_SEC`/`_TURNS`, `_EXEC_KILL_GRACE_MS`, `_WORKSPACE_WORKERS_MAX_ACTIVE`.
|
|
64
79
|
- **Git** — `PLURNK_SERVICE_GIT_ALLOWED` (0 = hard sandbox lockout), `_GIT_AUTO`.
|
|
65
|
-
- **Packet / reference docs** — `PLURNK_SERVICE_FILES_ITEMS` (turn-
|
|
80
|
+
- **Packet / reference docs** — `PLURNK_SERVICE_FILES_ITEMS` (turn-0 shallow file-map cap), `_PREVIEW_LINES`/`_PREVIEW_CHARS`, `_EDIT_RECEIPT_REVISION_CHARS`/`_CONTEXT_LINES`, `_BRANCH_RECEIPT_REVISION_CHARS`, `_DOCS_EXCLUDE`, `_PACKET_INJECT` (operator markdown section), `_POLICY`/`_PROJECT` (policy overrides), `_REQUIREMENTS` (Recap-source override), `_MD_<alias>` (materialized reference entry).
|
|
66
81
|
- **Providers** — the portable provider knobs and defaults are defined by
|
|
67
82
|
`@plurnk/plurnk-providers/.env.defaults`; any provider knob may take an alias
|
|
68
83
|
suffix that wins over the bare fallback.
|
|
69
|
-
- **
|
|
84
|
+
- **Provider capacity and prompt budget** —
|
|
85
|
+
`PLURNK_PROVIDERS_CONTEXT_WINDOW`/`_REASONING_RESERVE`/`_COMPLETION_RESERVE`
|
|
86
|
+
describe provider capacity. `PLURNK_SERVICE_PROMPT_BUDGET` applies optional
|
|
87
|
+
virtual pressure; `PLURNK_SERVICE_SAFETY` is the packing margin.
|
|
70
88
|
- **Plugins** — bare `PLURNK_PLUGINS_TRUSTED_ONLY` (0/unset = load all installed; a value = `@plurnk/*` plus an allowlist).
|
|
71
|
-
- **Semantic search** — `
|
|
72
|
-
- **Schemes: http** — `PLURNK_SCHEMES_HTTP_FETCH_TIMEOUT
|
|
73
|
-
- **Execs**
|
|
89
|
+
- **Semantic search** — `PLURNK_SERVICE_SEMANTIC_CHUNK_TOKENS`/`_CHUNK_OVERLAP` (service-side chunking), `PLURNK_SERVICE_EMBED_DISABLE` (FTS-only), `PLURNK_MIMETYPES_EMBED_WORKERS` (the embedder's pool — mimetypes-owned).
|
|
90
|
+
- **Schemes: http** — `PLURNK_SCHEMES_HTTP_FETCH_TIMEOUT`, `_TTL_MS`, optional `# TAVILY_API_KEY=`, and `PLURNK_SCHEMES_HTTP_TAVILY_DEPTH`/`_TAVILY_TIMEOUT_MS`.
|
|
91
|
+
- **Execs** - `PLURNK_EXECS_<runtime>=0` disables a runtime; `PLURNK_EXECS_SEARCH_SEARXNG_URL` enables web search (unset = search off).
|
|
92
|
+
- **Hooks** — `PLURNK_HOOKS_COMMAND` plus JSON `PLURNK_HOOKS_ARGS` invokes one exact no-shell command for the core events selected by `PLURNK_HOOKS_EVENTS`; see `@plurnk/plurnk-hooks/README.md`.
|
|
93
|
+
- **Observability** — standard `OTEL_*` env ({§observability-boundary}):
|
|
94
|
+
`OTEL_TRACES_EXPORTER`/`OTEL_METRICS_EXPORTER` (`otlp` or `console`; unset
|
|
95
|
+
keeps the signal off), `OTEL_SERVICE_NAME` (default `plurnk-service`),
|
|
96
|
+
`OTEL_SDK_DISABLED` (opt out), and the OTLP exporters' own
|
|
97
|
+
`OTEL_EXPORTER_OTLP_*` settings. An unconfigured daemon never loads the OTel
|
|
98
|
+
SDK. Prompts, reasoning, file bodies, URLs, secrets, and plugin payloads are
|
|
99
|
+
never exported.
|
|
74
100
|
|
|
75
101
|
The client's own knobs live under `PLURNK_CLIENT_*` (`--workspace`, `--run`, `--yolo`, `--json`…) — see `plurnk --help`.
|
package/README.md
CHANGED
|
@@ -7,28 +7,38 @@ operation dispatch. Its client surface is AG-UI over HTTP/SSE through
|
|
|
7
7
|
|
|
8
8
|
## What an agent can do
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
The exact model-facing language and operation set are owned by
|
|
11
|
+
[`plurnk.md`](https://github.com/plurnk/plurnk-service/blob/main/plurnk-contracts/plurnk.md). In brief, an agent can:
|
|
11
12
|
|
|
12
|
-
|
|
13
|
+
- inspect and modify admitted project files and durable worker entries;
|
|
14
|
+
- search lexical, structural, graph, and embedding-derived indexes;
|
|
15
|
+
- run registered executors and observe their runtime-named streams;
|
|
16
|
+
- delegate to workers, communicate, and collect their results; and
|
|
17
|
+
- curate its addressable log with tagged `FOLD`, `OPEN`, and `KILL` operations.
|
|
13
18
|
|
|
14
|
-
##
|
|
19
|
+
## Lifecycle model
|
|
15
20
|
|
|
16
|
-
Workspace = the shared world (one filesystem + membership overlay).
|
|
21
|
+
Workspace = the shared world (one filesystem + membership overlay). Worker = one actor and its private history over that world. Loop = one queued-to-terminal unit of work within a worker; each loop contains turns, and every model turn leads with `PLAN`. Workers fork and message each other — many clients, many workers, one workspace.
|
|
17
22
|
|
|
18
23
|
## Integration
|
|
19
24
|
|
|
20
|
-
Clients use AG-UI management actions and
|
|
25
|
+
Clients use AG-UI management actions and AG-UI Run streams exposed by
|
|
21
26
|
`@plurnk/plurnk-agui`. Core supplies an in-process daemon seam; it does not open
|
|
22
27
|
a second client transport.
|
|
23
28
|
|
|
24
|
-
##
|
|
29
|
+
## Start
|
|
25
30
|
|
|
26
31
|
```
|
|
27
32
|
npm install -g @plurnk/plurnk-service
|
|
28
|
-
plurnk-service
|
|
33
|
+
plurnk-service migrate # apply the disposable version-1 schema baseline
|
|
34
|
+
plurnk-service start # daemon
|
|
29
35
|
```
|
|
30
36
|
|
|
31
|
-
Config + state live in `~/.plurnk/` (created on first
|
|
37
|
+
Config + state live in `~/.plurnk/` (created on first start): put your config in `~/.plurnk/.env` (yours, seeded once); the DB defaults to `~/.plurnk/plurnk.db`. Declare a provider/model as `PLURNK_MODEL_<alias>=<provider>/<model-id>`, then select that alias with `PLURNK_MODEL=<alias>`. **[`INSTALL.md`](./INSTALL.md) is the config guide** — the cascade, prefix ownership, coupled settings, and profiles; each installed package's `.env.defaults` supplies its exact machine floor.
|
|
38
|
+
|
|
39
|
+
The 1.x package retains its frozen root library barrel for SemVer compatibility;
|
|
40
|
+
it is not the client boundary and gains no new APIs. Programmatic forensic use
|
|
41
|
+
imports `@plurnk/plurnk-service/digest`.
|
|
32
42
|
|
|
33
43
|
## Contract & siblings
|
|
34
44
|
|
|
@@ -37,14 +47,19 @@ Config + state live in `~/.plurnk/` (created on first run): put your config in `
|
|
|
37
47
|
- `@plurnk/plurnk-schemes` — addressable resource contract.
|
|
38
48
|
- `@plurnk/plurnk-mimetypes` — content handling contract.
|
|
39
49
|
- `@plurnk/plurnk-execs` — executable capability contract.
|
|
50
|
+
- `@plurnk/plurnk-hooks` — selected lifecycle events delivered to exact commands.
|
|
51
|
+
|
|
52
|
+
## Observability
|
|
53
|
+
|
|
54
|
+
The daemon can emit OpenTelemetry traces and low-cardinality metrics through the standard `OTEL_*` environment ({§observability-boundary}): `OTEL_TRACES_EXPORTER` / `OTEL_METRICS_EXPORTER` select `otlp` or `console` per signal, `OTEL_SERVICE_NAME` names the service, and `OTEL_SDK_DISABLED` opts out. Unconfigured, the daemon never loads the SDK. The boundary observes lifecycle (workspace, loop, turn, provider, parse, dispatch, proposal, stream, digest) without ever recording prompts, reasoning, file bodies, URLs, secrets, or plugin payloads.
|
|
40
55
|
|
|
41
56
|
## Semantic search
|
|
42
57
|
|
|
43
|
-
|
|
58
|
+
The default service installation includes `@plurnk/plurnk-mimetypes-embeddings`, so `FIND`'s `~query` uses embedding cosine ranking without a separate package install. `PLURNK_SERVICE_EMBED_DISABLE=1` explicitly selects FTS keyword ranking; a missing required artifact is a broken installation and refuses startup. A remote OpenAI-compatible embedder can replace the included local path; see [`INSTALL.md`](./INSTALL.md).
|
|
44
59
|
|
|
45
60
|
## The file sandbox
|
|
46
61
|
|
|
47
|
-
Plurnk sees what
|
|
62
|
+
Plurnk sees what Git or the client explicitly admits. The AGENTS.md policy path is injected separately as privileged policy, not as a file entry. A project file admitted by neither Git nor the client does not exist to the model, and an ignored secret can be neither read nor overwritten. New files can be created only inside the project and only where the result will remain visible; member edits are proposal-gated; an outside-root member is read-only unless the client explicitly granted it. `EXEC` deliberately reaches beyond this file sandbox, so its proposal policy is the machine perimeter. Details: SPEC {§scheme-address} ({§fs-namespace} through {§fs-world-state}).
|
|
48
63
|
|
|
49
64
|
## Tests
|
|
50
65
|
|