@plurnk/plurnk-service 1.7.0 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.defaults +49 -42
- package/INSTALL.md +48 -11
- package/README.md +12 -2
- package/SPEC.md +1166 -475
- package/digest-sql/channel-dispositions/dispositions.sql +15 -0
- package/digest-sql/channel-state/state.sql +6 -0
- package/digest-sql/curation/curation.sql +5 -0
- package/digest-sql/derivations/derivations.sql +4 -0
- package/digest-sql/embeddings/embeddings.sql +4 -0
- package/digest-sql/entry-dispositions/dispositions.sql +15 -0
- package/digest-sql/entry-state/state.sql +6 -0
- package/digest-sql/token-counts/token-counts.sql +2 -0
- package/dist/Paths.d.ts +0 -4
- package/dist/Paths.d.ts.map +1 -1
- package/dist/Paths.js +1 -21
- package/dist/Paths.js.map +1 -1
- package/dist/build-info.json +1 -1
- package/dist/content/read-projector.d.ts.map +1 -1
- package/dist/content/read-projector.js +4 -3
- package/dist/content/read-projector.js.map +1 -1
- package/dist/core/BudgetReadout.d.ts.map +1 -1
- package/dist/core/BudgetReadout.js +12 -22
- package/dist/core/BudgetReadout.js.map +1 -1
- package/dist/core/ChannelWrite.d.ts +8 -3
- package/dist/core/ChannelWrite.d.ts.map +1 -1
- package/dist/core/ChannelWrite.js +40 -8
- package/dist/core/ChannelWrite.js.map +1 -1
- package/dist/core/ChannelWrite.sql +19 -5
- package/dist/core/CoreSchemeServices.d.ts +7 -3
- package/dist/core/CoreSchemeServices.d.ts.map +1 -1
- package/dist/core/CoreSchemeServices.js +8 -1
- package/dist/core/CoreSchemeServices.js.map +1 -1
- package/dist/core/Dispatcher.d.ts +15 -6
- package/dist/core/Dispatcher.d.ts.map +1 -1
- package/dist/core/Dispatcher.js +352 -306
- package/dist/core/Dispatcher.js.map +1 -1
- package/dist/core/Engine.d.ts +22 -10
- package/dist/core/Engine.d.ts.map +1 -1
- package/dist/core/Engine.js +86 -46
- package/dist/core/Engine.js.map +1 -1
- package/dist/core/Engine.sql +202 -177
- package/dist/core/EntryAddressBinding.d.ts +32 -0
- package/dist/core/EntryAddressBinding.d.ts.map +1 -0
- package/dist/core/EntryAddressBinding.js +93 -0
- package/dist/core/EntryAddressBinding.js.map +1 -0
- package/dist/core/ExecutorRegistry.d.ts +12 -6
- package/dist/core/ExecutorRegistry.d.ts.map +1 -1
- package/dist/core/ExecutorRegistry.js +34 -31
- package/dist/core/ExecutorRegistry.js.map +1 -1
- package/dist/core/HostPaths.d.ts +29 -0
- package/dist/core/HostPaths.d.ts.map +1 -0
- package/dist/core/HostPaths.js +74 -0
- package/dist/core/HostPaths.js.map +1 -0
- package/dist/core/LegacyHome.d.ts +10 -0
- package/dist/core/LegacyHome.d.ts.map +1 -0
- package/dist/core/LegacyHome.js +170 -0
- package/dist/core/LegacyHome.js.map +1 -0
- package/dist/core/LogBody.d.ts +1 -1
- package/dist/core/LogBody.d.ts.map +1 -1
- package/dist/core/LogBody.js +21 -3
- package/dist/core/LogBody.js.map +1 -1
- package/dist/core/LogEntryProjection.js +1 -1
- package/dist/core/LogEntryProjection.js.map +1 -1
- package/dist/core/LogVisibility.d.ts +28 -0
- package/dist/core/LogVisibility.d.ts.map +1 -0
- package/dist/core/LogVisibility.js +215 -0
- package/dist/core/LogVisibility.js.map +1 -0
- package/dist/core/LoopLifecycle.d.ts +1 -0
- package/dist/core/LoopLifecycle.d.ts.map +1 -1
- package/dist/core/LoopLifecycle.js +8 -0
- package/dist/core/LoopLifecycle.js.map +1 -1
- package/dist/core/LoopLifecycle.sql +10 -0
- package/dist/core/OperatorConfig.d.ts +6 -0
- package/dist/core/OperatorConfig.d.ts.map +1 -0
- package/dist/core/OperatorConfig.js +95 -0
- package/dist/core/OperatorConfig.js.map +1 -0
- package/dist/core/OverflowTurn.d.ts +11 -0
- package/dist/core/OverflowTurn.d.ts.map +1 -0
- package/dist/core/OverflowTurn.js +81 -0
- package/dist/core/OverflowTurn.js.map +1 -0
- package/dist/core/Owner.js +3 -3
- package/dist/core/Owner.js.map +1 -1
- package/dist/core/PacketBuilder.d.ts +7 -15
- package/dist/core/PacketBuilder.d.ts.map +1 -1
- package/dist/core/PacketBuilder.js +64 -127
- package/dist/core/PacketBuilder.js.map +1 -1
- package/dist/core/ProblemLog.js +1 -1
- package/dist/core/ProblemLog.js.map +1 -1
- package/dist/core/ProposalLifecycle.d.ts +4 -1
- package/dist/core/ProposalLifecycle.d.ts.map +1 -1
- package/dist/core/ProposalLifecycle.js +86 -47
- package/dist/core/ProposalLifecycle.js.map +1 -1
- package/dist/core/ProviderInstantiate.d.ts +9 -5
- package/dist/core/ProviderInstantiate.d.ts.map +1 -1
- package/dist/core/ProviderInstantiate.js +99 -104
- package/dist/core/ProviderInstantiate.js.map +1 -1
- package/dist/core/ReasoningEvent.d.ts +13 -0
- package/dist/core/ReasoningEvent.d.ts.map +1 -0
- package/dist/core/ReasoningEvent.js +6 -0
- package/dist/core/ReasoningEvent.js.map +1 -0
- package/dist/core/ResourceMutations.d.ts +15 -19
- package/dist/core/ResourceMutations.d.ts.map +1 -1
- package/dist/core/ResourceMutations.js +118 -41
- package/dist/core/ResourceMutations.js.map +1 -1
- package/dist/core/SchemeRegistry.d.ts +12 -12
- package/dist/core/SchemeRegistry.d.ts.map +1 -1
- package/dist/core/SchemeRegistry.js +58 -57
- package/dist/core/SchemeRegistry.js.map +1 -1
- package/dist/core/ToolResources.d.ts +19 -0
- package/dist/core/ToolResources.d.ts.map +1 -0
- package/dist/core/ToolResources.js +123 -0
- package/dist/core/ToolResources.js.map +1 -0
- package/dist/core/Turn.d.ts +27 -0
- package/dist/core/Turn.d.ts.map +1 -0
- package/dist/core/Turn.js +43 -0
- package/dist/core/Turn.js.map +1 -0
- package/dist/core/Turn.sql +72 -0
- package/dist/core/TurnOps.d.ts +7 -0
- package/dist/core/TurnOps.d.ts.map +1 -0
- package/dist/core/TurnOps.js +73 -0
- package/dist/core/TurnOps.js.map +1 -0
- package/dist/core/TurnRunner.d.ts +56 -5
- package/dist/core/TurnRunner.d.ts.map +1 -1
- package/dist/core/TurnRunner.js +1163 -929
- package/dist/core/TurnRunner.js.map +1 -1
- package/dist/core/WorkerName.d.ts +2 -1
- package/dist/core/WorkerName.d.ts.map +1 -1
- package/dist/core/WorkerName.js +2 -1
- package/dist/core/WorkerName.js.map +1 -1
- package/dist/core/WorkerName.sql +17 -2
- package/dist/core/WorkspaceGate.js +1 -1
- package/dist/core/WorkspaceGate.js.map +1 -1
- package/dist/core/caps/CapsResolve.d.ts +2 -2
- package/dist/core/caps/CapsResolve.d.ts.map +1 -1
- package/dist/core/caps/CapsResolve.js +5 -7
- package/dist/core/caps/CapsResolve.js.map +1 -1
- package/dist/core/caps/DbChannelCaps.d.ts +1 -1
- package/dist/core/caps/DbChannelCaps.d.ts.map +1 -1
- package/dist/core/caps/DbChannelCaps.js +13 -11
- package/dist/core/caps/DbChannelCaps.js.map +1 -1
- package/dist/core/caps/DbEntryCaps.d.ts +5 -5
- package/dist/core/caps/DbEntryCaps.d.ts.map +1 -1
- package/dist/core/caps/DbEntryCaps.js +27 -30
- package/dist/core/caps/DbEntryCaps.js.map +1 -1
- package/dist/core/caps/DbNotifyCaps.d.ts +1 -1
- package/dist/core/caps/DbNotifyCaps.d.ts.map +1 -1
- package/dist/core/caps/DbNotifyCaps.js +5 -3
- package/dist/core/caps/DbNotifyCaps.js.map +1 -1
- package/dist/core/caps/DbSubscriptionCaps.d.ts +3 -3
- package/dist/core/caps/DbSubscriptionCaps.d.ts.map +1 -1
- package/dist/core/caps/DbSubscriptionCaps.js +16 -26
- package/dist/core/caps/DbSubscriptionCaps.js.map +1 -1
- package/dist/core/caps/SchemeCtxImpl.d.ts +6 -4
- package/dist/core/caps/SchemeCtxImpl.d.ts.map +1 -1
- package/dist/core/caps/SchemeCtxImpl.js +37 -5
- package/dist/core/caps/SchemeCtxImpl.js.map +1 -1
- package/dist/core/env-defaults.d.ts.map +1 -1
- package/dist/core/env-defaults.js +7 -5
- package/dist/core/env-defaults.js.map +1 -1
- package/dist/core/file-creation-policy.d.ts +9 -0
- package/dist/core/file-creation-policy.d.ts.map +1 -0
- package/dist/core/file-creation-policy.js +25 -0
- package/dist/core/file-creation-policy.js.map +1 -0
- package/dist/core/fork.d.ts +4 -1
- package/dist/core/fork.d.ts.map +1 -1
- package/dist/core/fork.js +39 -16
- package/dist/core/fork.js.map +1 -1
- package/dist/core/fork.sql +83 -40
- package/dist/core/git-env.d.ts +0 -1
- package/dist/core/git-env.d.ts.map +1 -1
- package/dist/core/git-env.js +0 -3
- package/dist/core/git-env.js.map +1 -1
- package/dist/core/git-membership.d.ts +19 -1
- package/dist/core/git-membership.d.ts.map +1 -1
- package/dist/core/git-membership.js +233 -74
- package/dist/core/git-membership.js.map +1 -1
- package/dist/core/git-state.d.ts.map +1 -1
- package/dist/core/git-state.js +13 -14
- package/dist/core/git-state.js.map +1 -1
- package/dist/core/operation-target-groups.d.ts +3 -0
- package/dist/core/operation-target-groups.d.ts.map +1 -0
- package/dist/core/operation-target-groups.js +53 -0
- package/dist/core/operation-target-groups.js.map +1 -0
- package/dist/core/packet-inject.d.ts +0 -1
- package/dist/core/packet-inject.d.ts.map +1 -1
- package/dist/core/packet-inject.js +6 -13
- package/dist/core/packet-inject.js.map +1 -1
- package/dist/core/packet-wire.d.ts +4 -0
- package/dist/core/packet-wire.d.ts.map +1 -1
- package/dist/core/packet-wire.js +226 -53
- package/dist/core/packet-wire.js.map +1 -1
- package/dist/core/plurnk-uri.d.ts +14 -3
- package/dist/core/plurnk-uri.d.ts.map +1 -1
- package/dist/core/plurnk-uri.js +62 -24
- package/dist/core/plurnk-uri.js.map +1 -1
- package/dist/core/scheme-types.d.ts +1 -0
- package/dist/core/scheme-types.d.ts.map +1 -1
- package/dist/core/teaching.d.ts.map +1 -1
- package/dist/core/teaching.js +4 -5
- package/dist/core/teaching.js.map +1 -1
- package/dist/core/worker-ops.sql +10 -6
- package/dist/core/worker-settings.d.ts +10 -0
- package/dist/core/worker-settings.d.ts.map +1 -0
- package/dist/core/worker-settings.js +32 -0
- package/dist/core/worker-settings.js.map +1 -0
- package/dist/core/workspace-settings.d.ts +2 -11
- package/dist/core/workspace-settings.d.ts.map +1 -1
- package/dist/core/workspace-settings.js +7 -47
- package/dist/core/workspace-settings.js.map +1 -1
- package/dist/digest/Digest.d.ts.map +1 -1
- package/dist/digest/Digest.js +164 -92
- package/dist/digest/Digest.js.map +1 -1
- package/dist/digest/digest.sql +9 -3
- package/dist/observe/genai.d.ts +9 -0
- package/dist/observe/genai.d.ts.map +1 -0
- package/dist/observe/genai.js +31 -0
- package/dist/observe/genai.js.map +1 -0
- package/dist/observe/spans.d.ts +3 -3
- package/dist/observe/spans.d.ts.map +1 -1
- package/dist/observe/spans.js +20 -5
- package/dist/observe/spans.js.map +1 -1
- package/dist/schemes/EffectPolicy.d.ts +3 -0
- package/dist/schemes/EffectPolicy.d.ts.map +1 -1
- package/dist/schemes/EffectPolicy.js +38 -6
- package/dist/schemes/EffectPolicy.js.map +1 -1
- package/dist/schemes/Exec.d.ts +3 -2
- package/dist/schemes/Exec.d.ts.map +1 -1
- package/dist/schemes/Exec.js +109 -34
- package/dist/schemes/Exec.js.map +1 -1
- package/dist/schemes/ExecOutputScheme.d.ts.map +1 -1
- package/dist/schemes/ExecOutputScheme.js +5 -4
- package/dist/schemes/ExecOutputScheme.js.map +1 -1
- package/dist/schemes/File.d.ts.map +1 -1
- package/dist/schemes/File.js +170 -80
- package/dist/schemes/File.js.map +1 -1
- package/dist/schemes/Log.d.ts +6 -2
- package/dist/schemes/Log.d.ts.map +1 -1
- package/dist/schemes/Log.js +73 -22
- package/dist/schemes/Log.js.map +1 -1
- package/dist/schemes/Log.sql +25 -7
- package/dist/schemes/Prompt.d.ts +2 -3
- package/dist/schemes/Prompt.d.ts.map +1 -1
- package/dist/schemes/Prompt.js +5 -9
- package/dist/schemes/Prompt.js.map +1 -1
- package/dist/schemes/QuestionTool.d.ts +10 -0
- package/dist/schemes/QuestionTool.d.ts.map +1 -0
- package/dist/schemes/QuestionTool.js +81 -0
- package/dist/schemes/QuestionTool.js.map +1 -0
- package/dist/schemes/Skill.d.ts.map +1 -1
- package/dist/schemes/Skill.js +6 -1
- package/dist/schemes/Skill.js.map +1 -1
- package/dist/schemes/Worker.d.ts.map +1 -1
- package/dist/schemes/Worker.js +97 -34
- package/dist/schemes/Worker.js.map +1 -1
- package/dist/schemes/_entry-crud.d.ts +5 -5
- package/dist/schemes/_entry-crud.d.ts.map +1 -1
- package/dist/schemes/_entry-crud.js +22 -17
- package/dist/schemes/_entry-crud.js.map +1 -1
- package/dist/schemes/_entry-crud.sql +77 -24
- package/dist/schemes/_entry-find.d.ts +8 -5
- package/dist/schemes/_entry-find.d.ts.map +1 -1
- package/dist/schemes/_entry-find.js +121 -40
- package/dist/schemes/_entry-find.js.map +1 -1
- package/dist/schemes/_entry-find.sql +16 -11
- package/dist/schemes/_entry-graph.sql +2 -6
- package/dist/schemes/_entry-manifest.d.ts +2 -2
- package/dist/schemes/_entry-manifest.d.ts.map +1 -1
- package/dist/schemes/_entry-manifest.js +18 -6
- package/dist/schemes/_entry-manifest.js.map +1 -1
- package/dist/schemes/_entry-ops.d.ts +6 -5
- package/dist/schemes/_entry-ops.d.ts.map +1 -1
- package/dist/schemes/_entry-ops.js +39 -46
- package/dist/schemes/_entry-ops.js.map +1 -1
- package/dist/schemes/_entry-ops.sql +9 -6
- package/dist/schemes/_entry-send.d.ts +2 -2
- package/dist/schemes/_entry-send.d.ts.map +1 -1
- package/dist/schemes/_entry-send.js +16 -14
- package/dist/schemes/_entry-send.js.map +1 -1
- package/dist/schemes/_search-index.d.ts.map +1 -1
- package/dist/schemes/_search-index.js +39 -25
- package/dist/schemes/_search-index.js.map +1 -1
- package/dist/server/Daemon.d.ts +98 -15
- package/dist/server/Daemon.d.ts.map +1 -1
- package/dist/server/Daemon.js +864 -348
- package/dist/server/Daemon.js.map +1 -1
- package/dist/server/DaemonModule.d.ts +84 -19
- package/dist/server/DaemonModule.d.ts.map +1 -1
- package/dist/server/DrainSupervisor.d.ts +15 -10
- package/dist/server/DrainSupervisor.d.ts.map +1 -1
- package/dist/server/DrainSupervisor.js +70 -19
- package/dist/server/DrainSupervisor.js.map +1 -1
- package/dist/server/Functionality.d.ts +44 -0
- package/dist/server/Functionality.d.ts.map +1 -0
- package/dist/server/Functionality.js +422 -0
- package/dist/server/Functionality.js.map +1 -0
- package/dist/server/FunctionalityManager.d.ts +22 -0
- package/dist/server/FunctionalityManager.d.ts.map +1 -0
- package/dist/server/FunctionalityManager.js +121 -0
- package/dist/server/FunctionalityManager.js.map +1 -0
- package/dist/server/SkillsFunctionality.d.ts +61 -0
- package/dist/server/SkillsFunctionality.d.ts.map +1 -0
- package/dist/server/SkillsFunctionality.js +449 -0
- package/dist/server/SkillsFunctionality.js.map +1 -0
- package/dist/server/WorkerCapabilities.d.ts +21 -0
- package/dist/server/WorkerCapabilities.d.ts.map +1 -0
- package/dist/server/WorkerCapabilities.js +214 -0
- package/dist/server/WorkerCapabilities.js.map +1 -0
- package/dist/server/WorkerResidency.d.ts +40 -0
- package/dist/server/WorkerResidency.d.ts.map +1 -0
- package/dist/server/WorkerResidency.js +283 -0
- package/dist/server/WorkerResidency.js.map +1 -0
- package/dist/server/client-input.d.ts +6 -2
- package/dist/server/client-input.d.ts.map +1 -1
- package/dist/server/client-input.js +72 -32
- package/dist/server/client-input.js.map +1 -1
- package/dist/server/dispatch-as-plurnk.d.ts +2 -2
- package/dist/server/dispatch-as-plurnk.d.ts.map +1 -1
- package/dist/server/dispatch-as-plurnk.js +109 -23
- package/dist/server/dispatch-as-plurnk.js.map +1 -1
- package/dist/server/drain.sql +33 -13
- package/dist/server/envelope.d.ts +7 -2
- package/dist/server/envelope.d.ts.map +1 -1
- package/dist/server/envelope.js +12 -6
- package/dist/server/envelope.js.map +1 -1
- package/dist/server/envelope.sql +36 -4
- package/dist/server/lifecycle-recovery.sql +24 -17
- package/dist/server/logEntry.d.ts +2 -1
- package/dist/server/logEntry.d.ts.map +1 -1
- package/dist/server/logEntry.js +3 -2
- package/dist/server/logEntry.js.map +1 -1
- package/dist/server/logEntry.sql +7 -0
- package/dist/server/loop-model.d.ts +2 -2
- package/dist/server/loop-model.d.ts.map +1 -1
- package/dist/server/loop-model.js +23 -33
- package/dist/server/loop-model.js.map +1 -1
- package/dist/server/loopDocs.d.ts +2 -1
- package/dist/server/loopDocs.d.ts.map +1 -1
- package/dist/server/loopDocs.js +88 -21
- package/dist/server/loopDocs.js.map +1 -1
- package/dist/server/loopDocs.sql +14 -8
- package/dist/server/model-catalog.d.ts +3 -0
- package/dist/server/model-catalog.d.ts.map +1 -0
- package/dist/server/model-catalog.js +83 -0
- package/dist/server/model-catalog.js.map +1 -0
- package/dist/server/model-route.d.ts +7 -0
- package/dist/server/model-route.d.ts.map +1 -0
- package/dist/server/model-route.js +47 -0
- package/dist/server/model-route.js.map +1 -0
- package/dist/server/module-discovery.d.ts +13 -0
- package/dist/server/module-discovery.d.ts.map +1 -0
- package/dist/server/module-discovery.js +103 -0
- package/dist/server/module-discovery.js.map +1 -0
- package/dist/server/seam-entry-read.sql +9 -7
- package/dist/server/seam-log-read.sql +1 -1
- package/dist/server/seam-loop.sql +10 -1
- package/dist/server/seam-proposal-list.sql +4 -2
- package/dist/server/worker-capabilities.sql +19 -0
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +193 -124
- package/dist/service.js.map +1 -1
- package/migrations/001_schema.sql +905 -196
- package/package.json +40 -38
- package/dist/core/ExecutableTools.d.ts +0 -11
- package/dist/core/ExecutableTools.d.ts.map +0 -1
- package/dist/core/ExecutableTools.js +0 -49
- package/dist/core/ExecutableTools.js.map +0 -1
- package/dist/core/JournalTurn.d.ts +0 -9
- package/dist/core/JournalTurn.d.ts.map +0 -1
- package/dist/core/JournalTurn.js +0 -14
- package/dist/core/JournalTurn.js.map +0 -1
- package/dist/core/JournalTurn.sql +0 -10
- package/dist/core/git-iso.d.ts +0 -13
- package/dist/core/git-iso.d.ts.map +0 -1
- package/dist/core/git-iso.js +0 -267
- package/dist/core/git-iso.js.map +0 -1
- package/dist/core/search-gate.d.ts +0 -17
- package/dist/core/search-gate.d.ts.map +0 -1
- package/dist/core/search-gate.js +0 -77
- package/dist/core/search-gate.js.map +0 -1
- package/dist/digest/Digest.sql +0 -1
- package/dist/server/workspace-capabilities.sql +0 -19
package/dist/server/envelope.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
//
|
|
3
3
|
// A client-interface module receives this value from an explicit workspace create
|
|
4
4
|
// or attach call. Core creates or selects the client worker but retains no transport
|
|
5
|
-
// binding; each dispatched client action allocates and settles its own
|
|
5
|
+
// binding; each dispatched client action allocates and settles its own administrative loop.
|
|
6
6
|
import GitMembership from "../core/git-membership.js";
|
|
7
7
|
import Results, { OperationFailureError } from "../core/results.js";
|
|
8
8
|
import LoopLifecycle from "../core/LoopLifecycle.js";
|
|
@@ -103,8 +103,8 @@ export default class Envelope {
|
|
|
103
103
|
workerId: worker.id, workerName: worker.name,
|
|
104
104
|
};
|
|
105
105
|
}
|
|
106
|
-
// Client action
|
|
107
|
-
// statements become ordered turns and settlement closes the
|
|
106
|
+
// Client action loop allocator. One action allocates one administrative
|
|
107
|
+
// loop; its statements become ordered turns and settlement closes the loop.
|
|
108
108
|
static async ensureClientLoop(db, workerId) {
|
|
109
109
|
const loop = await db.envelope_insert_client_loop.get({ worker_id: workerId });
|
|
110
110
|
if (loop === undefined)
|
|
@@ -151,13 +151,19 @@ export default class Envelope {
|
|
|
151
151
|
const existing = await db.envelope_get_worker_by_name.get({ workspace_id: workspaceId, name: "plurnk" });
|
|
152
152
|
if (existing !== undefined)
|
|
153
153
|
return existing.id;
|
|
154
|
-
const worker = await db.envelope_insert_worker.get({ workspace_id: workspaceId, name: "plurnk", origin: "
|
|
154
|
+
const worker = await db.envelope_insert_worker.get({ workspace_id: workspaceId, name: "plurnk", origin: "_plurnk" });
|
|
155
155
|
if (worker === undefined)
|
|
156
156
|
throw new Error("ensurePlurnkWorker: worker insert returned no row");
|
|
157
157
|
return worker.id;
|
|
158
158
|
}
|
|
159
|
-
static async listWorkersForWorkspace(db, workspaceId) {
|
|
160
|
-
|
|
159
|
+
static async listWorkersForWorkspace(db, workspaceId, query = {}) {
|
|
160
|
+
const filterParent = Object.hasOwn(query, "parentWorkerId");
|
|
161
|
+
return await db.envelope_list_workers_for_workspace.all({
|
|
162
|
+
workspace_id: workspaceId,
|
|
163
|
+
origin: query.origin ?? null,
|
|
164
|
+
filter_parent: filterParent ? 1 : 0,
|
|
165
|
+
parent_worker_id: query.parentWorkerId ?? null,
|
|
166
|
+
});
|
|
161
167
|
}
|
|
162
168
|
// {§methods-workspace-prompts}: expose root-conversation loop seeds directly,
|
|
163
169
|
// without forcing clients to reconstruct prompt history from log rows.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/server/envelope.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,EAAE;AACF,kFAAkF;AAClF,qFAAqF;AACrF,
|
|
1
|
+
{"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/server/envelope.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,EAAE;AACF,kFAAkF;AAClF,qFAAqF;AACrF,4FAA4F;AAG5F,OAAO,aAAa,MAAM,2BAA2B,CAAC;AACtD,OAAO,OAAO,EAAE,EAAE,qBAAqB,EAAqB,MAAM,oBAAoB,CAAC;AACvF,OAAO,aAAa,MAAM,0BAA0B,CAAC;AACrD,OAAO,UAAU,MAAM,uBAAuB,CAAC;AAE/C,MAAM,eAAe,GAAG,CACpB,KAAa,EACb,IAAY,EACZ,MAAc,EACd,MAAc,EACd,UAAU,GAAsC,EAAE,EAC7B,EAAE,CAAC,IAAI,qBAAqB,CACjD,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,CAAC,CAC/D,CAAC;AAiCF,MAAM,CAAC,OAAO,OAAO,QAAQ;IACzB,gFAAgF;IAChF,8EAA8E;IAC9E,+DAA+D;IAC/D,MAAM,CAAC,OAAO,CAAC,MAAc;QACzB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAChF,OAAO,GAAG,MAAM,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;IACrC,CAAC;IAED,MAAM,CAAC,qBAAqB;QACxB,OAAO,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAM,EAAE,IAAI,GAAuF,EAAE;QACnI,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,WAAW,CAAC,CAAC;QACvE,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC;QAC7C,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,yBAAyB,CAAC,GAAG,CAA4D,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC,CAAC;QAC1L,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,eAAe,CACjB,kBAAkB,EAClB,eAAe,EACf,GAAG,EACH,mBAAmB,IAAI,sBAAsB,EAC7C;gBACI,IAAI;gBACJ,QAAQ,EAAE,oEAAoE;gBAC9E,SAAS,EAAE,KAAK;aACnB,CACJ,CAAC;QACN,CAAC;QACD,kFAAkF;QAClF,2EAA2E;QAC3E,6CAA6C;QAC7C,MAAM,aAAa,CAAC,oBAAoB,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,EAAE,EAAE;YAC1C,WAAW,EAAE,SAAS,CAAC,EAAE;YACzB,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,QAAQ;SACnB,CAAC,CAAC;QACH,OAAO;YACH,WAAW,EAAE,SAAS,CAAC,EAAE,EAAE,aAAa,EAAE,SAAS,CAAC,IAAI;YACxD,WAAW,EAAE,SAAS,CAAC,YAAY;YACnC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI;SAC/C,CAAC;IACN,CAAC;IAED,sDAAsD;IACtD,gFAAgF;IAChF,4FAA4F;IAC5F,iFAAiF;IACjF,gFAAgF;IAChF,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,EAAM,EAAE,WAAmB,EAAE,IAAgD;QACrG,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC/D,MAAM,eAAe,CACjB,eAAe,EACf,0BAA0B,EAC1B,GAAG,EACH,iEAAiE,EACjE;gBACI,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,QAAQ,EAAE,yCAAyC;gBACnD,SAAS,EAAE,KAAK;aACnB,CACJ,CAAC;QACN,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,yBAAyB,CAAC,GAAG,CAAqD,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YACnI,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,eAAe,CACjB,eAAe,EACf,kBAAkB,EAClB,GAAG,EACH,UAAU,IAAI,CAAC,QAAQ,kBAAkB,EACzC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAC9B,CAAC;YACN,CAAC;YACD,IAAI,QAAQ,CAAC,YAAY,KAAK,WAAW,EAAE,CAAC;gBACxC,MAAM,eAAe,CACjB,eAAe,EACf,oBAAoB,EACpB,GAAG,EACH,UAAU,IAAI,CAAC,QAAQ,iCAAiC,WAAW,GAAG,EACtE;oBACI,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,WAAW;oBACX,iBAAiB,EAAE,QAAQ,CAAC,YAAY;oBACxC,SAAS,EAAE,KAAK;iBACnB,CACJ,CAAC;YACN,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpD,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,yBAAyB;YAChF,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,2BAA2B,CAAC,GAAG,CAA+B,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;YACzI,IAAI,QAAQ,KAAK,SAAS;gBAAE,OAAO,QAAQ,CAAC;YAC5C,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,sBAAsB,CAAC,GAAG,CAA+B,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YACrJ,IAAI,OAAO,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAC3F,OAAO,OAAO,CAAC;QACnB,CAAC;QACD,OAAO,MAAM,UAAU,CAAC,SAAS,CAAC,EAAE,EAAE;YAClC,WAAW;YACX,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,QAAQ;SACnB,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAM,EAAE,WAAmB,EAAE,IAAI,GAA+C,EAAE;QAC7G,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,sBAAsB,CAAC,GAAG,CAA4D,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;QACtI,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,eAAe,CACjB,kBAAkB,EAClB,qBAAqB,EACrB,GAAG,EACH,aAAa,WAAW,kBAAkB,EAC1C,EAAE,WAAW,EAAE,CAClB,CAAC;QACN,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACrE,OAAO;YACH,WAAW,EAAE,SAAS,CAAC,EAAE,EAAE,aAAa,EAAE,SAAS,CAAC,IAAI;YACxD,WAAW,EAAE,SAAS,CAAC,YAAY;YACnC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI;SAC/C,CAAC;IACN,CAAC;IAED,wEAAwE;IACxE,4EAA4E;IAC5E,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAM,EAAE,QAAgB;QAClD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,2BAA2B,CAAC,GAAG,CAAiB,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC/F,IAAI,IAAI,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACzF,OAAO,IAAI,CAAC,EAAE,CAAC;IACnB,CAAC;IAED,qHAAqH;IACrH,+EAA+E;IAC/E,gFAAgF;IAChF,gFAAgF;IAChF,8EAA8E;IAC9E,uFAAuF;IACvF,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAM,EAAE,WAAmB,EAAE,IAAa;QACrE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACrB,OAAO,MAAM,UAAU,CAAC,SAAS,CAAC,EAAE,EAAE;gBAClC,WAAW;gBACX,MAAM,EAAE,OAAO;gBACf,MAAM,EAAE,OAAO;aAClB,CAAC,CAAC;QACP,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,sBAAsB,CAAC,GAAG,CAA+B;YAC7E,YAAY,EAAE,WAAW;YACzB,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC;YAC7B,MAAM,EAAE,OAAO;SAClB,CAAC,CAAC;QACH,IAAI,MAAM,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QAC9F,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAM,EAAE,WAAmB;QACtD,4EAA4E;QAC5E,yEAAyE;QACzE,iEAAiE;QACjE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,yBAAyB,CAAC,EAAE,EAAE;YAC1D,WAAW;YACX,MAAM,EAAE,OAAO;SAClB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,EAAE,CAAC;IACrB,CAAC;IAED,0EAA0E;IAC1E,4EAA4E;IAC5E,+EAA+E;IAC/E,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAM,EAAE,WAAmB;QACvD,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,MAAM,GAAG,MAAM,EAAE,CAAC,sBAAsB,CAAC,GAAG,CAAiB,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QACrI,IAAI,MAAM,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QAC/F,OAAO,MAAM,CAAC,EAAE,CAAC;IACrB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAChC,EAAM,EACN,WAAmB,EACnB,KAAK,GAAgB,EAAE;QAEvB,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;QAC5D,OAAO,MAAM,EAAE,CAAC,mCAAmC,CAAC,GAAG,CAAY;YAC/D,YAAY,EAAE,WAAW;YACzB,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI;YAC5B,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnC,gBAAgB,EAAE,KAAK,CAAC,cAAc,IAAI,IAAI;SACjD,CAAC,CAAC;IACP,CAAC;IAED,8EAA8E;IAC9E,uEAAuE;IACvE,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,EAAM,EAAE,WAAmB,EAAE,KAAa;QAC3E,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,+BAA+B,CAAC,GAAG,CAAqB,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QACpH,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,EAAM,EAAE,MAAc,EAAE,MAAoB;QACrE,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACtD,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACtE,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW,MAAM,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,MAAM,EAAE,CAAC,0BAA0B,CAAC,GAAG,CAAC;YACpC,MAAM,EAAE,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC;YACjD,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YAC7B,OAAO,EAAE,MAAM;SAClB,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,EAAM;QAC9B,OAAO,MAAM,EAAE,CAAC,wBAAwB,CAAC,GAAG,EAAgB,CAAC;IACjE,CAAC;IAED,qFAAqF;IACrF,sFAAsF;IACtF,+EAA+E;IAC/E,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAM,EAAE,WAAmB,EAAE,IAAY;QACtE,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,2BAA2B,CAAC,GAAG,CAA+B,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9G,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACpB,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,sBAAsB,CAAC,GAAG,CAAiB,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;YAC3F,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC1B,MAAM,eAAe,CACjB,kBAAkB,EAClB,eAAe,EACf,GAAG,EACH,mBAAmB,IAAI,sBAAsB,EAC7C;oBACI,WAAW;oBACX,IAAI;oBACJ,QAAQ,EAAE,gCAAgC;oBAC1C,SAAS,EAAE,KAAK;iBACnB,CACJ,CAAC;YACN,CAAC;YACD,MAAM,eAAe,CACjB,kBAAkB,EAClB,qBAAqB,EACrB,GAAG,EACH,aAAa,WAAW,kBAAkB,EAC1C,EAAE,WAAW,EAAE,CAClB,CAAC;QACN,CAAC;QACD,OAAO,GAAG,CAAC,IAAI,CAAC;IACpB,CAAC;CACJ"}
|
package/dist/server/envelope.sql
CHANGED
|
@@ -28,23 +28,55 @@ RETURNING id, name;
|
|
|
28
28
|
|
|
29
29
|
-- PREP: envelope_insert_worker
|
|
30
30
|
-- origin is the worker's actor ({§machine-processes}): 'model' (the conversation),
|
|
31
|
-
-- 'client' (a connection's own worker), or '
|
|
31
|
+
-- 'client' (a connection's own worker), or '_plurnk' (the runtime self-hosting worker).
|
|
32
32
|
INSERT INTO workers (workspace_id, name, origin)
|
|
33
33
|
VALUES ($workspace_id, $name, $origin)
|
|
34
34
|
RETURNING id, name, origin;
|
|
35
35
|
|
|
36
36
|
-- PREP: envelope_get_worker_by_id
|
|
37
|
-
SELECT id, name, workspace_id, origin
|
|
37
|
+
SELECT id, name, workspace_id, created_at, origin,
|
|
38
|
+
parent_worker_id AS parentWorkerId
|
|
39
|
+
FROM workers
|
|
40
|
+
WHERE id = $id;
|
|
38
41
|
|
|
39
42
|
-- PREP: envelope_get_worker_by_name
|
|
40
|
-
SELECT id, name
|
|
43
|
+
SELECT id, name, workspace_id, created_at, origin,
|
|
44
|
+
parent_worker_id AS parentWorkerId
|
|
45
|
+
FROM workers
|
|
46
|
+
WHERE workspace_id = $workspace_id AND name = $name;
|
|
41
47
|
|
|
42
48
|
-- PREP: envelope_list_workers_for_workspace
|
|
43
|
-
SELECT id, name, created_at, origin
|
|
49
|
+
SELECT id, name, created_at, origin, parent_worker_id AS parentWorkerId
|
|
44
50
|
FROM workers
|
|
45
51
|
WHERE workspace_id = $workspace_id
|
|
52
|
+
AND ($origin IS NULL OR origin = $origin)
|
|
53
|
+
AND ($filter_parent = 0 OR parent_worker_id IS $parent_worker_id)
|
|
46
54
|
ORDER BY created_at DESC;
|
|
47
55
|
|
|
56
|
+
-- PREP: worker_settings_read
|
|
57
|
+
-- {§worker-settings} — the worker's own behavioral-rules bag.
|
|
58
|
+
SELECT settings FROM workers WHERE id = $id;
|
|
59
|
+
|
|
60
|
+
-- PREP: worker_settings_update
|
|
61
|
+
UPDATE workers
|
|
62
|
+
SET settings = $settings,
|
|
63
|
+
version = version + 1
|
|
64
|
+
WHERE id = $id
|
|
65
|
+
RETURNING id;
|
|
66
|
+
|
|
67
|
+
-- PREP: worker_generation_policy_read
|
|
68
|
+
-- {§worker-model-selection}/{§worker-reasoning-policy} — one durable generation policy.
|
|
69
|
+
SELECT model_route_id, spawn_model_route_id, reasoning_policy FROM workers WHERE id = $id;
|
|
70
|
+
|
|
71
|
+
-- PREP: worker_generation_policy_update
|
|
72
|
+
UPDATE workers
|
|
73
|
+
SET model_route_id = $model_route_id,
|
|
74
|
+
spawn_model_route_id = $spawn_model_route_id,
|
|
75
|
+
reasoning_policy = $reasoning_policy,
|
|
76
|
+
version = version + 1
|
|
77
|
+
WHERE id = $id
|
|
78
|
+
RETURNING id;
|
|
79
|
+
|
|
48
80
|
-- PREP: envelope_list_workspace_prompts
|
|
49
81
|
-- {§methods-workspace-prompts}: nonempty model-root loop seeds, newest-first;
|
|
50
82
|
-- spawned and forked children are not workspace-level user prompt history.
|
|
@@ -10,7 +10,7 @@ SET status = 500,
|
|
|
10
10
|
terminal_result = json_object(
|
|
11
11
|
'status', 500,
|
|
12
12
|
'problem', json_object(
|
|
13
|
-
'type', 'https://problems.plurnk.
|
|
13
|
+
'type', 'https://problems.plurnk.xyz/lifecycle/recovery/owner-vanished',
|
|
14
14
|
'title', 'Owner vanished',
|
|
15
15
|
'status', 500,
|
|
16
16
|
'detail', 'The daemon restarted while this loop was active; its process-local owner no longer exists.',
|
|
@@ -47,7 +47,7 @@ SET state = 'error',
|
|
|
47
47
|
failure = json_object(
|
|
48
48
|
'status', 500,
|
|
49
49
|
'problem', json_object(
|
|
50
|
-
'type', 'https://problems.plurnk.
|
|
50
|
+
'type', 'https://problems.plurnk.xyz/lifecycle/recovery/owner-vanished',
|
|
51
51
|
'title', 'Owner vanished',
|
|
52
52
|
'status', 500,
|
|
53
53
|
'detail', 'The daemon restarted before this provider response was durably observed; whether the provider completed the call is unknown.'
|
|
@@ -63,6 +63,16 @@ WHERE state = 'pending'
|
|
|
63
63
|
AND l.terminated_at IS NOT NULL
|
|
64
64
|
);
|
|
65
65
|
|
|
66
|
+
-- PREP: recovery_fail_open_turns
|
|
67
|
+
-- Every open turn has lost its process-local producer, including a narrow crash
|
|
68
|
+
-- window after its loop parked or queued. Provider evidence settles first; then
|
|
69
|
+
-- the producer-neutral lifecycle closes every unfinished container without
|
|
70
|
+
-- fabricating packet evidence.
|
|
71
|
+
UPDATE turns
|
|
72
|
+
SET status = 500,
|
|
73
|
+
completed_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
|
|
74
|
+
WHERE completed_at IS NULL;
|
|
75
|
+
|
|
66
76
|
-- PREP: recovery_fail_ownerless_proposals
|
|
67
77
|
-- {§worker-lifecycle-restart-recovery} Every proposed row depended on a
|
|
68
78
|
-- process-local resolution waiter. At boot that owner is necessarily gone, so
|
|
@@ -74,7 +84,7 @@ SET state = 'failed',
|
|
|
74
84
|
rx = json_object(
|
|
75
85
|
'status', 500,
|
|
76
86
|
'problem', json_object(
|
|
77
|
-
'type', 'https://problems.plurnk.
|
|
87
|
+
'type', 'https://problems.plurnk.xyz/lifecycle/recovery/owner-vanished',
|
|
78
88
|
'title', 'Owner vanished',
|
|
79
89
|
'status', 500,
|
|
80
90
|
'detail', 'The daemon restarted while this proposal was pending; its process-local owner no longer exists.',
|
|
@@ -117,17 +127,18 @@ SET closed_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now'),
|
|
|
117
127
|
close_result = json_object(
|
|
118
128
|
'status', 500,
|
|
119
129
|
'problem', json_object(
|
|
120
|
-
'type', 'https://problems.plurnk.
|
|
130
|
+
'type', 'https://problems.plurnk.xyz/lifecycle/recovery/owner-vanished',
|
|
121
131
|
'title', 'Owner vanished',
|
|
122
132
|
'status', 500,
|
|
123
133
|
'detail', 'The daemon restarted while this stream was active; its process-local owner no longer exists.'
|
|
124
134
|
)
|
|
125
|
-
)
|
|
135
|
+
),
|
|
136
|
+
channel_results = '{}'
|
|
126
137
|
WHERE closed_at IS NULL;
|
|
127
138
|
|
|
128
139
|
-- PREP: recovery_resume_unblocked_parks
|
|
129
140
|
-- A 202 continuation is valid only while its worker still holds an open stream
|
|
130
|
-
-- or a child
|
|
141
|
+
-- or a child with any unresolved loop. Requeue every now-satisfied park in one
|
|
131
142
|
-- pass; child completion propagates the same transition to ancestors later.
|
|
132
143
|
UPDATE loops
|
|
133
144
|
SET status = 100
|
|
@@ -140,13 +151,7 @@ WHERE status = 202
|
|
|
140
151
|
AND NOT EXISTS (
|
|
141
152
|
SELECT 1
|
|
142
153
|
FROM workers child
|
|
143
|
-
JOIN loops child_loop ON child_loop.
|
|
144
|
-
SELECT id
|
|
145
|
-
FROM loops latest
|
|
146
|
-
WHERE latest.worker_id = child.id
|
|
147
|
-
ORDER BY latest.sequence DESC, latest.id DESC
|
|
148
|
-
LIMIT 1
|
|
149
|
-
)
|
|
154
|
+
JOIN loops child_loop ON child_loop.worker_id = child.id
|
|
150
155
|
WHERE child.parent_worker_id = loops.worker_id
|
|
151
156
|
AND child_loop.status IN (100, 102, 202)
|
|
152
157
|
);
|
|
@@ -155,8 +160,9 @@ WHERE status = 202
|
|
|
155
160
|
-- {§prompt-loop-containment}: finish an absent or partially staged orphan
|
|
156
161
|
-- recovery before queued drains become visible at boot. A non-queued recovery
|
|
157
162
|
-- already crossed its delivery boundary and must never be replayed.
|
|
158
|
-
SELECT source.id AS loop_id, source.worker_id AS worker_id
|
|
163
|
+
SELECT source.id AS loop_id, source.worker_id AS worker_id, w.origin
|
|
159
164
|
FROM loops source
|
|
165
|
+
JOIN workers w ON w.id = source.worker_id
|
|
160
166
|
LEFT JOIN loops recovery ON recovery.orphan_source_loop_id = source.id
|
|
161
167
|
WHERE source.status IN (200, 413, 429, 499, 500, 504, 508)
|
|
162
168
|
AND (recovery.id IS NULL OR recovery.status = 100)
|
|
@@ -165,18 +171,19 @@ WHERE source.status IN (200, 413, 429, 499, 500, 504, 508)
|
|
|
165
171
|
FROM entries e
|
|
166
172
|
JOIN entry_channels c ON c.entry_id = e.id AND c.name = 'body'
|
|
167
173
|
WHERE e.scheme = 'prompt'
|
|
174
|
+
AND e.authority = ''
|
|
168
175
|
AND e.owner_id = source.worker_id
|
|
169
176
|
AND e.pathname LIKE '/' || source.sequence || '/%'
|
|
170
177
|
AND NOT EXISTS (
|
|
171
178
|
SELECT 1 FROM log_entries le
|
|
172
|
-
WHERE le.loop_id = source.id AND le.origin = '
|
|
179
|
+
WHERE le.loop_id = source.id AND le.origin = '_plurnk' AND le.op = 'prompt'
|
|
173
180
|
AND le.scheme = 'prompt' AND le.pathname = e.pathname
|
|
174
181
|
)
|
|
175
182
|
)
|
|
176
183
|
ORDER BY source.worker_id, source.sequence;
|
|
177
184
|
|
|
178
185
|
-- PREP: recovery_queued_workers
|
|
179
|
-
SELECT DISTINCT w.id AS worker_id, w.workspace_id
|
|
186
|
+
SELECT DISTINCT w.id AS worker_id, w.workspace_id, w.origin
|
|
180
187
|
FROM workers w
|
|
181
188
|
JOIN loops l ON l.worker_id = w.id
|
|
182
189
|
WHERE l.status = 100
|
|
@@ -190,7 +197,7 @@ WHERE l.status = 100
|
|
|
190
197
|
ORDER BY w.id;
|
|
191
198
|
|
|
192
199
|
-- PREP: recovery_parked_workers
|
|
193
|
-
SELECT DISTINCT w.id AS worker_id, w.workspace_id
|
|
200
|
+
SELECT DISTINCT w.id AS worker_id, w.workspace_id, w.origin
|
|
194
201
|
FROM workers w
|
|
195
202
|
JOIN loops l ON l.worker_id = w.id
|
|
196
203
|
WHERE l.status = 202
|
|
@@ -11,7 +11,7 @@ export type LogEntryWire = {
|
|
|
11
11
|
origin: string;
|
|
12
12
|
source: string | null;
|
|
13
13
|
op: string | null;
|
|
14
|
-
|
|
14
|
+
delimiter: string;
|
|
15
15
|
signal: unknown;
|
|
16
16
|
scheme: string | null;
|
|
17
17
|
username: string | null;
|
|
@@ -30,6 +30,7 @@ export type LogEntryWire = {
|
|
|
30
30
|
weight: number;
|
|
31
31
|
attrs: unknown;
|
|
32
32
|
tags: string[];
|
|
33
|
+
reasoning?: string;
|
|
33
34
|
};
|
|
34
35
|
export default class LogEntry {
|
|
35
36
|
#private;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logEntry.d.ts","sourceRoot":"","sources":["../../src/server/logEntry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AAMxC,MAAM,MAAM,YAAY,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,
|
|
1
|
+
{"version":3,"file":"logEntry.d.ts","sourceRoot":"","sources":["../../src/server/logEntry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AAMxC,MAAM,MAAM,YAAY,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,EAAE,EAAE,OAAO,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,EAAE,EAAE,OAAO,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,QAAQ;;IAsBzB,OAAa,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAoCpE;CACJ"}
|
package/dist/server/logEntry.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
export default class LogEntry {
|
|
5
5
|
static #parseJsonOrNull(v) {
|
|
6
6
|
// "" is the actionless-row sentinel for "no statement" (error and
|
|
7
|
-
//
|
|
7
|
+
// actionless source rows store tx="");
|
|
8
8
|
// JSON.parse("") throws, so an empty string is no-value → null, like NULL itself.
|
|
9
9
|
if (v === null || v === undefined || v === "")
|
|
10
10
|
return null;
|
|
@@ -39,7 +39,7 @@ export default class LogEntry {
|
|
|
39
39
|
origin: row.origin,
|
|
40
40
|
source: row.source,
|
|
41
41
|
op: row.op,
|
|
42
|
-
|
|
42
|
+
delimiter: row.delimiter,
|
|
43
43
|
signal: LogEntry.#parseJsonOrNull(row.signal),
|
|
44
44
|
scheme: row.scheme,
|
|
45
45
|
username: row.username,
|
|
@@ -58,6 +58,7 @@ export default class LogEntry {
|
|
|
58
58
|
weight: row.weight,
|
|
59
59
|
attrs: LogEntry.#parseJsonOrNull(row.attrs),
|
|
60
60
|
tags: LogEntry.#parseTags(row.tags),
|
|
61
|
+
...(typeof row.reasoning === "string" ? { reasoning: row.reasoning } : {}),
|
|
61
62
|
};
|
|
62
63
|
}
|
|
63
64
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logEntry.js","sourceRoot":"","sources":["../../src/server/logEntry.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,mEAAmE;AACnE,yCAAyC;
|
|
1
|
+
{"version":3,"file":"logEntry.js","sourceRoot":"","sources":["../../src/server/logEntry.ts"],"names":[],"mappings":"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"}
|
package/dist/server/logEntry.sql
CHANGED
|
@@ -4,6 +4,13 @@
|
|
|
4
4
|
-- loop_seq / turn_seq are the loop+turn ordinals (the logical coordinate clients
|
|
5
5
|
-- render, e.g. 01/02/03) — distinct from the loop_id/turn_id DB keys ({§methods-log-coordinate}).
|
|
6
6
|
SELECT le.*, l.sequence AS loop_seq, t.sequence AS turn_seq,
|
|
7
|
+
CASE
|
|
8
|
+
WHEN le.origin = 'model'
|
|
9
|
+
AND le.op = 'SEND'
|
|
10
|
+
AND json_type(t.packet, '$.assistant.reasoning') = 'text'
|
|
11
|
+
AND length(json_extract(t.packet, '$.assistant.reasoning')) > 0
|
|
12
|
+
THEN json_extract(t.packet, '$.assistant.reasoning')
|
|
13
|
+
END AS reasoning,
|
|
7
14
|
COALESCE((
|
|
8
15
|
SELECT json_group_array(tag)
|
|
9
16
|
FROM (SELECT tag FROM log_tags WHERE log_entry_id = le.id ORDER BY tag)
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { ProviderAlias } from "@plurnk/plurnk-providers";
|
|
2
|
-
export declare const
|
|
1
|
+
import type { ProviderAlias, ProviderSpec } from "@plurnk/plurnk-providers";
|
|
2
|
+
export declare const resolveLoopRoute: (selector: string | undefined, declared: readonly ProviderAlias[]) => ProviderSpec | null;
|
|
3
3
|
//# sourceMappingURL=loop-model.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop-model.d.ts","sourceRoot":"","sources":["../../src/server/loop-model.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"loop-model.d.ts","sourceRoot":"","sources":["../../src/server/loop-model.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAW5E,eAAO,MAAM,gBAAgB,aACf,MAAM,GAAG,SAAS,YAClB,SAAS,aAAa,EAAE,KACnC,YAAY,GAAG,IAsBjB,CAAC"}
|
|
@@ -1,39 +1,29 @@
|
|
|
1
|
+
import { resolveModelSelector } from "@plurnk/plurnk-providers";
|
|
1
2
|
import Results, { OperationFailureError } from "../core/results.js";
|
|
2
|
-
// {§methods-loop-run-model}: resolve a runLoop call's optional
|
|
3
|
-
//
|
|
3
|
+
// {§methods-loop-run-model}: resolve a runLoop call's optional selector to the
|
|
4
|
+
// ProviderSpec to instantiate, or null for "use the boot default". PURE (no env read, no
|
|
4
5
|
// construction) so the precedence + parse contract is hermetically testable; the Daemon wraps it
|
|
5
6
|
// with ProviderInstantiate + the #provider fallback.
|
|
6
7
|
//
|
|
7
|
-
//
|
|
8
|
-
// A malformed
|
|
9
|
-
// run the wrong model.
|
|
10
|
-
export const
|
|
11
|
-
if (
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
if (resolved === undefined) {
|
|
28
|
-
throw new OperationFailureError(Results.failure("daemon:provider", "alias-not-found", 404, `Provider alias '${alias}' is not declared.`, {}, {
|
|
29
|
-
alias,
|
|
30
|
-
stage: "provider-selection",
|
|
31
|
-
recovery: "Select a declared provider alias.",
|
|
32
|
-
retryable: false,
|
|
33
|
-
}));
|
|
34
|
-
}
|
|
35
|
-
return resolved;
|
|
36
|
-
}
|
|
37
|
-
return null; // neither → the daemon's boot default
|
|
8
|
+
// One selector accepts either a declared alias or an exact provider/model route.
|
|
9
|
+
// A malformed route or undeclared alias throws legibly — the daemon must never
|
|
10
|
+
// silently run the wrong model.
|
|
11
|
+
export const resolveLoopRoute = (selector, declared) => {
|
|
12
|
+
if (selector === undefined)
|
|
13
|
+
return null;
|
|
14
|
+
const route = resolveModelSelector(selector, declared);
|
|
15
|
+
if (route !== null)
|
|
16
|
+
return route;
|
|
17
|
+
const exact = selector.includes("/");
|
|
18
|
+
throw new OperationFailureError(Results.failure("daemon:provider", exact ? "model-spec-invalid" : "alias-not-found", exact ? 400 : 404, exact
|
|
19
|
+
? `Model selector '${selector}' is not a provider/model specification.`
|
|
20
|
+
: `Provider alias '${selector}' is not declared.`, {}, {
|
|
21
|
+
selector,
|
|
22
|
+
stage: "provider-selection",
|
|
23
|
+
recovery: exact
|
|
24
|
+
? "Use a provider/model specification."
|
|
25
|
+
: "Select a declared alias or use a provider/model specification.",
|
|
26
|
+
retryable: false,
|
|
27
|
+
}));
|
|
38
28
|
};
|
|
39
29
|
//# sourceMappingURL=loop-model.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop-model.js","sourceRoot":"","sources":["../../src/server/loop-model.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"loop-model.js","sourceRoot":"","sources":["../../src/server/loop-model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,OAAO,OAAO,EAAE,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAEpE,+EAA+E;AAC/E,yFAAyF;AACzF,iGAAiG;AACjG,qDAAqD;AACrD,EAAE;AACF,iFAAiF;AACjF,+EAA+E;AAC/E,gCAAgC;AAChC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC5B,QAA4B,EAC5B,QAAkC,EACf,EAAE;IACrB,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACxC,MAAM,KAAK,GAAG,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACvD,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,IAAI,qBAAqB,CAAC,OAAO,CAAC,OAAO,CAC3C,iBAAiB,EACjB,KAAK,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,iBAAiB,EAChD,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EACjB,KAAK;QACD,CAAC,CAAC,mBAAmB,QAAQ,0CAA0C;QACvE,CAAC,CAAC,mBAAmB,QAAQ,oBAAoB,EACrD,EAAE,EACF;QACI,QAAQ;QACR,KAAK,EAAE,oBAAoB;QAC3B,QAAQ,EAAE,KAAK;YACX,CAAC,CAAC,qCAAqC;YACvC,CAAC,CAAC,gEAAgE;QACtE,SAAS,EAAE,KAAK;KACnB,CACJ,CAAC,CAAC;AACP,CAAC,CAAC"}
|
|
@@ -2,6 +2,7 @@ import type Engine from "../core/Engine.ts";
|
|
|
2
2
|
import type { Db } from "../core/Db.ts";
|
|
3
3
|
export default class LoopDocs {
|
|
4
4
|
#private;
|
|
5
|
-
static
|
|
5
|
+
static evict(db: Db, workerId: number): void;
|
|
6
|
+
static materialize(engine: Engine, db: Db, workspaceId: number, workerId: number): Promise<void>;
|
|
6
7
|
}
|
|
7
8
|
//# sourceMappingURL=loopDocs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loopDocs.d.ts","sourceRoot":"","sources":["../../src/server/loopDocs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"loopDocs.d.ts","sourceRoot":"","sources":["../../src/server/loopDocs.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AASxC,MAAM,CAAC,OAAO,OAAO,QAAQ;;IAOzB,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAE3C;IAsCD,OAAa,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2DrG;CACJ"}
|
package/dist/server/loopDocs.js
CHANGED
|
@@ -1,52 +1,119 @@
|
|
|
1
|
+
// Worker documentation reconciliation. It runs when that worker's Functionality
|
|
2
|
+
// becomes resident and after its snapshot changes. Two private sets run through
|
|
3
|
+
// an ordinary `_plurnk` turn in the addressed worker ({§actor-boundary-doc-injection}):
|
|
4
|
+
// 1. the project AGENTS.md at worker://~/_plurnk/agents.md — Engine.runTurn foists
|
|
5
|
+
// its READ at turn 0 ({§turn0-agents-stunt});
|
|
6
|
+
// 2. the exact current scheme and executable-tool reference set under
|
|
7
|
+
// worker://~/_plurnk/skills/plurnk/ and worker://~/_plurnk/tools/ — discovered by the
|
|
8
|
+
// turn-0 FIND surveys ({§schemes-self-doc-materialization},
|
|
9
|
+
// {§tools-resource-materialization}).
|
|
10
|
+
import { createHash } from "node:crypto";
|
|
11
|
+
import { readdir, readFile } from "node:fs/promises";
|
|
12
|
+
import { join } from "node:path";
|
|
13
|
+
import { generatedPathname } from "../core/plurnk-uri.js";
|
|
1
14
|
import { UNKNOWN_POSITION, } from "@plurnk/plurnk-contracts";
|
|
2
|
-
import WorkspaceSettings from "../core/workspace-settings.js";
|
|
3
|
-
import Owner from "../core/Owner.js";
|
|
4
15
|
import DispatchAsPlurnk from "./dispatch-as-plurnk.js";
|
|
5
16
|
export default class LoopDocs {
|
|
17
|
+
// {§schemes-self-doc-materialization} {§tools-resource-materialization} —
|
|
18
|
+
// the generated-skill surface tracks a content signature so repeated
|
|
19
|
+
// boot/module-publish materializations dispatch nothing when nothing
|
|
20
|
+
// changed (the entry layer's 304 no-op never even runs).
|
|
21
|
+
static #signatures = new WeakMap();
|
|
22
|
+
static evict(db, workerId) {
|
|
23
|
+
LoopDocs.#signatures.get(db)?.delete(workerId);
|
|
24
|
+
}
|
|
25
|
+
// Nested AGENTS.md files below the project root (the root file has its own
|
|
26
|
+
// slot), skipping dot-directories and node_modules. Deterministic order.
|
|
27
|
+
static async #nestedInstructions(root) {
|
|
28
|
+
const out = [];
|
|
29
|
+
const walk = async (relative) => {
|
|
30
|
+
const entries = await readdir(join(root, relative), { withFileTypes: true }).catch(() => []);
|
|
31
|
+
for (const entry of entries) {
|
|
32
|
+
const childRelative = relative.length === 0 ? entry.name : `${relative}/${entry.name}`;
|
|
33
|
+
if (entry.isDirectory()) {
|
|
34
|
+
if (entry.name.startsWith(".") || entry.name === "node_modules")
|
|
35
|
+
continue;
|
|
36
|
+
await walk(childRelative);
|
|
37
|
+
}
|
|
38
|
+
else if (entry.name === "AGENTS.md" && relative.length > 0) {
|
|
39
|
+
const content = await readFile(join(root, childRelative), "utf8").catch(() => null);
|
|
40
|
+
if (content !== null)
|
|
41
|
+
out.push([childRelative, content]);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
await walk("");
|
|
46
|
+
return out.toSorted((left, right) => left[0].localeCompare(right[0]));
|
|
47
|
+
}
|
|
6
48
|
static #target(pathname) {
|
|
7
49
|
return {
|
|
8
50
|
kind: "url",
|
|
9
|
-
raw: `worker
|
|
51
|
+
raw: `worker://~${pathname}`,
|
|
10
52
|
scheme: "worker",
|
|
11
53
|
username: null,
|
|
12
54
|
password: null,
|
|
13
|
-
hostname: "
|
|
55
|
+
hostname: "~",
|
|
14
56
|
port: null,
|
|
15
57
|
pathname,
|
|
16
58
|
query: null,
|
|
17
59
|
fragment: null,
|
|
18
60
|
};
|
|
19
61
|
}
|
|
20
|
-
static async materialize(engine, db, workspaceId) {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const
|
|
62
|
+
static async materialize(engine, db, workspaceId, workerId) {
|
|
63
|
+
// {§turn0-agents-stunt} — the project's AGENTS.md becomes one
|
|
64
|
+
// worker-private worker://~/_plurnk/agents.md entry, foisted at turn 0.
|
|
65
|
+
const workspace = await db.envelope_get_workspace.get({
|
|
66
|
+
id: workspaceId,
|
|
67
|
+
});
|
|
68
|
+
const agentsContent = workspace?.project_root === null || workspace?.project_root === undefined
|
|
69
|
+
? null
|
|
70
|
+
: await readFile(join(workspace.project_root, "AGENTS.md"), "utf8").catch(() => null);
|
|
71
|
+
const desired = new Map((await engine.referenceEntries(workspaceId, workerId)).map(({ pathname, content }) => [pathname, content]));
|
|
72
|
+
if (agentsContent !== null)
|
|
73
|
+
desired.set(generatedPathname("/agents.md"), agentsContent);
|
|
74
|
+
// #346 — nested AGENTS.md honor the standard's closest-file scope:
|
|
75
|
+
// each materializes at _plurnk/instructions/<subtree>/AGENTS.md with its
|
|
76
|
+
// path preserved. No foisted READ and no teaching (operator-ruled):
|
|
77
|
+
// the path convention is in the models' prior, and the files are
|
|
78
|
+
// ordinary members in the file survey.
|
|
79
|
+
if (workspace?.project_root !== null && workspace?.project_root !== undefined) {
|
|
80
|
+
for (const [relative, content] of await LoopDocs.#nestedInstructions(workspace.project_root)) {
|
|
81
|
+
desired.set(generatedPathname(`/instructions/${relative}`), content);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const signature = createHash("sha256")
|
|
85
|
+
.update([...desired].map(([pathname, content]) => `${pathname}\u0000${content}`).join("\u0001"))
|
|
86
|
+
.digest("hex");
|
|
87
|
+
const byWorker = LoopDocs.#signatures.get(db) ?? new Map();
|
|
88
|
+
if (byWorker.get(workerId) === signature)
|
|
89
|
+
return;
|
|
90
|
+
const materialized = await db.loop_docs_materialized.all({
|
|
30
91
|
workspace_id: workspaceId,
|
|
31
|
-
owner_id:
|
|
92
|
+
owner_id: workerId,
|
|
32
93
|
});
|
|
33
|
-
|
|
34
|
-
|
|
94
|
+
const current = new Map(materialized.map(({ pathname, content }) => [pathname, content]));
|
|
95
|
+
const statements = [];
|
|
96
|
+
for (const pathname of current.keys()) {
|
|
97
|
+
if (desired.has(pathname))
|
|
35
98
|
continue;
|
|
36
99
|
statements.push({
|
|
37
|
-
op: "
|
|
100
|
+
op: "KILL", delimiter: "", annotation: null, signal: null,
|
|
38
101
|
target: LoopDocs.#target(pathname),
|
|
39
102
|
lineMarker: null, body: null, position: UNKNOWN_POSITION,
|
|
40
103
|
});
|
|
41
104
|
}
|
|
42
|
-
for (const [pathname, content] of
|
|
105
|
+
for (const [pathname, content] of desired) {
|
|
106
|
+
if (current.get(pathname) === content)
|
|
107
|
+
continue;
|
|
43
108
|
statements.push({
|
|
44
|
-
op: "EDIT",
|
|
109
|
+
op: "EDIT", delimiter: "", annotation: null, signal: null,
|
|
45
110
|
target: LoopDocs.#target(pathname),
|
|
46
111
|
lineMarker: { marks: [1, -1] }, body: content, position: UNKNOWN_POSITION,
|
|
47
112
|
});
|
|
48
113
|
}
|
|
49
|
-
await DispatchAsPlurnk.dispatch(engine, db, workspaceId, statements);
|
|
114
|
+
await DispatchAsPlurnk.dispatch(engine, db, workspaceId, workerId, statements);
|
|
115
|
+
byWorker.set(workerId, signature);
|
|
116
|
+
LoopDocs.#signatures.set(db, byWorker);
|
|
50
117
|
}
|
|
51
118
|
}
|
|
52
119
|
//# sourceMappingURL=loopDocs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loopDocs.js","sourceRoot":"","sources":["../../src/server/loopDocs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"loopDocs.js","sourceRoot":"","sources":["../../src/server/loopDocs.ts"],"names":[],"mappings":"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"}
|