@plurnk/plurnk-service 4.1.0 → 4.3.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 +3 -0
- package/INSTALL.md +7 -2
- package/README.md +3 -1
- package/SPEC.md +1996 -1370
- package/dist/build-info.d.ts.map +1 -1
- package/dist/build-info.js +25 -3
- package/dist/build-info.js.map +1 -1
- package/dist/build-info.json +1 -1
- package/dist/completions/_plurnk-service +2 -2
- package/dist/completions/plurnk-service.bash +2 -2
- package/dist/completions/plurnk-service.fish +2 -0
- package/dist/content/body-preview.js.map +1 -1
- package/dist/content/byte-view.d.ts.map +1 -1
- package/dist/content/byte-view.js +3 -2
- package/dist/content/byte-view.js.map +1 -1
- package/dist/content/edit-collision.d.ts +2 -1
- package/dist/content/edit-collision.d.ts.map +1 -1
- package/dist/content/edit-collision.js.map +1 -1
- package/dist/content/edit-receipt.d.ts.map +1 -1
- package/dist/content/edit-receipt.js +28 -23
- package/dist/content/edit-receipt.js.map +1 -1
- package/dist/content/edited-span.js +1 -1
- package/dist/content/edited-span.js.map +1 -1
- package/dist/content/line-anchors.d.ts +3 -2
- package/dist/content/line-anchors.d.ts.map +1 -1
- package/dist/content/line-anchors.js +33 -19
- package/dist/content/line-anchors.js.map +1 -1
- package/dist/content/line-selection.js.map +1 -1
- package/dist/content/pattern-edits.js +1 -1
- package/dist/content/pattern-edits.js.map +1 -1
- package/dist/content/read-projector.d.ts +1 -1
- package/dist/content/read-projector.d.ts.map +1 -1
- package/dist/content/read-projector.js +10 -8
- package/dist/content/read-projector.js.map +1 -1
- package/dist/content/read-resolve.d.ts.map +1 -1
- package/dist/content/read-resolve.js +6 -5
- package/dist/content/read-resolve.js.map +1 -1
- package/dist/core/AdmittedTurnExecutor.d.ts +4 -4
- package/dist/core/AdmittedTurnExecutor.d.ts.map +1 -1
- package/dist/core/AdmittedTurnExecutor.js +20 -18
- package/dist/core/AdmittedTurnExecutor.js.map +1 -1
- package/dist/core/AmbientMembers.d.ts +18 -0
- package/dist/core/AmbientMembers.d.ts.map +1 -0
- package/dist/core/AmbientMembers.js +84 -0
- package/dist/core/AmbientMembers.js.map +1 -0
- package/dist/core/BareBatchRunner.d.ts +1 -1
- package/dist/core/BareBatchRunner.d.ts.map +1 -1
- package/dist/core/BareBatchRunner.js +2 -2
- package/dist/core/BareBatchRunner.js.map +1 -1
- package/dist/core/CapabilityPolicies.js.map +1 -1
- package/dist/core/CapabilityResolver.d.ts +1 -2
- package/dist/core/CapabilityResolver.d.ts.map +1 -1
- package/dist/core/CapabilityResolver.js +11 -7
- package/dist/core/CapabilityResolver.js.map +1 -1
- package/dist/core/ChannelWrite.d.ts +2 -2
- package/dist/core/ChannelWrite.d.ts.map +1 -1
- package/dist/core/ChannelWrite.js.map +1 -1
- package/dist/core/ChannelWrite.sql +27 -0
- package/dist/core/ClientInteractions.js.map +1 -1
- package/dist/core/ContextFit.js +1 -1
- package/dist/core/ContextFit.js.map +1 -1
- package/dist/core/CoreSchemeServices.d.ts.map +1 -1
- package/dist/core/CoreSchemeServices.js +6 -4
- package/dist/core/CoreSchemeServices.js.map +1 -1
- package/dist/core/DataStatementRunner.d.ts.map +1 -1
- package/dist/core/DataStatementRunner.js +24 -15
- package/dist/core/DataStatementRunner.js.map +1 -1
- package/dist/core/Dispatcher.d.ts +29 -5
- package/dist/core/Dispatcher.d.ts.map +1 -1
- package/dist/core/Dispatcher.js +242 -132
- package/dist/core/Dispatcher.js.map +1 -1
- package/dist/core/EditMutations.d.ts.map +1 -1
- package/dist/core/EditMutations.js +12 -6
- package/dist/core/EditMutations.js.map +1 -1
- package/dist/core/EditSequence.js.map +1 -1
- package/dist/core/Engine.d.ts +12 -6
- package/dist/core/Engine.d.ts.map +1 -1
- package/dist/core/Engine.js +29 -7
- package/dist/core/Engine.js.map +1 -1
- package/dist/core/ExecutionOutputs.js.map +1 -1
- package/dist/core/ExecutorRegistry.d.ts +1 -2
- package/dist/core/ExecutorRegistry.d.ts.map +1 -1
- package/dist/core/ExecutorRegistry.js +2 -2
- package/dist/core/ExecutorRegistry.js.map +1 -1
- package/dist/core/FileAddress.d.ts +1 -0
- package/dist/core/FileAddress.d.ts.map +1 -1
- package/dist/core/FileAddress.js +8 -1
- package/dist/core/FileAddress.js.map +1 -1
- package/dist/core/FilePublication.d.ts.map +1 -1
- package/dist/core/FilePublication.js +6 -3
- package/dist/core/FilePublication.js.map +1 -1
- package/dist/core/FileSnapshot.d.ts.map +1 -1
- package/dist/core/FileSnapshot.js +8 -5
- package/dist/core/FileSnapshot.js.map +1 -1
- package/dist/core/KillHandler.d.ts.map +1 -1
- package/dist/core/KillHandler.js +7 -0
- package/dist/core/KillHandler.js.map +1 -1
- package/dist/core/LiveSubscription.d.ts +1 -0
- package/dist/core/LiveSubscription.d.ts.map +1 -1
- package/dist/core/LiveSubscription.js +3 -2
- package/dist/core/LiveSubscription.js.map +1 -1
- package/dist/core/LiveSubscriptions.d.ts +4 -1
- package/dist/core/LiveSubscriptions.d.ts.map +1 -1
- package/dist/core/LiveSubscriptions.js +42 -1
- package/dist/core/LiveSubscriptions.js.map +1 -1
- package/dist/core/LogBody.d.ts.map +1 -1
- package/dist/core/LogBody.js +22 -19
- package/dist/core/LogBody.js.map +1 -1
- package/dist/core/LogVisibility.d.ts +1 -1
- package/dist/core/LogVisibility.d.ts.map +1 -1
- package/dist/core/LogVisibility.js +4 -6
- package/dist/core/LogVisibility.js.map +1 -1
- package/dist/core/LogWriter.d.ts.map +1 -1
- package/dist/core/LogWriter.js +6 -9
- package/dist/core/LogWriter.js.map +1 -1
- package/dist/core/LoopDriver.d.ts +4 -4
- package/dist/core/LoopDriver.d.ts.map +1 -1
- package/dist/core/LoopDriver.js +4 -5
- package/dist/core/LoopDriver.js.map +1 -1
- package/dist/core/LoopLifecycle.d.ts +2 -0
- package/dist/core/LoopLifecycle.d.ts.map +1 -1
- package/dist/core/LoopLifecycle.js +13 -3
- package/dist/core/LoopLifecycle.js.map +1 -1
- package/dist/core/LoopLifecycle.sql +4 -4
- package/dist/core/LoopOutcome.d.ts.map +1 -1
- package/dist/core/LoopOutcome.js +2 -2
- package/dist/core/LoopOutcome.js.map +1 -1
- package/dist/core/MembershipMaterialization.d.ts.map +1 -1
- package/dist/core/MembershipMaterialization.js +29 -29
- package/dist/core/MembershipMaterialization.js.map +1 -1
- package/dist/core/MessageResources.d.ts +5 -1
- package/dist/core/MessageResources.d.ts.map +1 -1
- package/dist/core/MessageResources.js +12 -0
- package/dist/core/MessageResources.js.map +1 -1
- package/dist/core/MessageResources.sql +8 -0
- package/dist/core/MutationEffects.d.ts +1 -0
- package/dist/core/MutationEffects.d.ts.map +1 -1
- package/dist/core/MutationEffects.js +14 -10
- package/dist/core/MutationEffects.js.map +1 -1
- package/dist/core/OperationHistory.d.ts.map +1 -1
- package/dist/core/OperationHistory.js +4 -3
- package/dist/core/OperationHistory.js.map +1 -1
- package/dist/core/OperatorConfig.d.ts.map +1 -1
- package/dist/core/OperatorConfig.js +3 -2
- package/dist/core/OperatorConfig.js.map +1 -1
- package/dist/core/PacketBuilder.d.ts +1 -1
- package/dist/core/PacketBuilder.d.ts.map +1 -1
- package/dist/core/PacketBuilder.js +7 -5
- package/dist/core/PacketBuilder.js.map +1 -1
- package/dist/core/ProblemLog.d.ts +2 -5
- package/dist/core/ProblemLog.d.ts.map +1 -1
- package/dist/core/ProblemLog.js +2 -3
- package/dist/core/ProblemLog.js.map +1 -1
- package/dist/core/ProposalLifecycle.d.ts +12 -11
- package/dist/core/ProposalLifecycle.d.ts.map +1 -1
- package/dist/core/ProposalLifecycle.js +92 -84
- package/dist/core/ProposalLifecycle.js.map +1 -1
- package/dist/core/ReasoningEvent.d.ts +2 -0
- package/dist/core/ReasoningEvent.d.ts.map +1 -1
- package/dist/core/ReplyMetadata.d.ts.map +1 -1
- package/dist/core/ReplyMetadata.js +4 -3
- package/dist/core/ReplyMetadata.js.map +1 -1
- package/dist/core/ResourceBindings.d.ts +2 -2
- package/dist/core/ResourceBindings.d.ts.map +1 -1
- package/dist/core/ResourceBindings.js.map +1 -1
- package/dist/core/ResourceMutations.d.ts +1 -1
- package/dist/core/ResourceMutations.d.ts.map +1 -1
- package/dist/core/ResourceMutations.js +1 -2
- package/dist/core/ResourceMutations.js.map +1 -1
- package/dist/core/ResourceSelector.js +2 -2
- package/dist/core/ResourceSelector.js.map +1 -1
- package/dist/core/ResourceTransfers.d.ts.map +1 -1
- package/dist/core/ResourceTransfers.js +162 -120
- package/dist/core/ResourceTransfers.js.map +1 -1
- package/dist/core/SchemeRegistry.d.ts +6 -5
- package/dist/core/SchemeRegistry.d.ts.map +1 -1
- package/dist/core/SchemeRegistry.js +32 -26
- package/dist/core/SchemeRegistry.js.map +1 -1
- package/dist/core/ServiceHelp.d.ts.map +1 -1
- package/dist/core/ServiceHelp.js +2 -1
- package/dist/core/ServiceHelp.js.map +1 -1
- package/dist/core/StoredPacket.d.ts.map +1 -1
- package/dist/core/StoredPacket.js +26 -19
- package/dist/core/StoredPacket.js.map +1 -1
- package/dist/core/StrikeRail.d.ts +1 -2
- package/dist/core/StrikeRail.d.ts.map +1 -1
- package/dist/core/StrikeRail.js +4 -4
- package/dist/core/StrikeRail.js.map +1 -1
- package/dist/core/TerminalResult.d.ts +0 -2
- package/dist/core/TerminalResult.d.ts.map +1 -1
- package/dist/core/TerminalResult.js +0 -18
- package/dist/core/TerminalResult.js.map +1 -1
- package/dist/core/ToolInputSchema.d.ts.map +1 -1
- package/dist/core/ToolInputSchema.js +2 -2
- package/dist/core/ToolInputSchema.js.map +1 -1
- package/dist/core/ToolResources.d.ts +1 -0
- package/dist/core/ToolResources.d.ts.map +1 -1
- package/dist/core/ToolResources.js +7 -6
- package/dist/core/ToolResources.js.map +1 -1
- package/dist/core/TurnDispositionHandler.d.ts +1 -1
- package/dist/core/TurnDispositionHandler.d.ts.map +1 -1
- package/dist/core/TurnDispositionHandler.js +0 -1
- package/dist/core/TurnDispositionHandler.js.map +1 -1
- package/dist/core/TurnMaterialization.d.ts.map +1 -1
- package/dist/core/TurnMaterialization.js +3 -2
- package/dist/core/TurnMaterialization.js.map +1 -1
- package/dist/core/TurnRunner.d.ts +13 -12
- package/dist/core/TurnRunner.d.ts.map +1 -1
- package/dist/core/TurnRunner.js +197 -173
- package/dist/core/TurnRunner.js.map +1 -1
- package/dist/core/TurnRunner.sql +3 -3
- package/dist/core/WorkerOwners.js.map +1 -1
- package/dist/core/caps/DbEntryCaps.js.map +1 -1
- package/dist/core/caps/DbMessageCaps.d.ts +3 -3
- package/dist/core/caps/DbMessageCaps.d.ts.map +1 -1
- package/dist/core/caps/DbProjectionCaps.js +1 -1
- package/dist/core/caps/DbProjectionCaps.js.map +1 -1
- package/dist/core/caps/DbSubscriptionCaps.d.ts.map +1 -1
- package/dist/core/caps/DbSubscriptionCaps.js +1 -0
- package/dist/core/caps/DbSubscriptionCaps.js.map +1 -1
- package/dist/core/caps/SchemeCtxImpl.d.ts +1 -0
- package/dist/core/caps/SchemeCtxImpl.d.ts.map +1 -1
- package/dist/core/caps/SchemeCtxImpl.js +10 -1
- package/dist/core/caps/SchemeCtxImpl.js.map +1 -1
- package/dist/core/env-catalog.js.map +1 -1
- package/dist/core/env-defaults.d.ts.map +1 -1
- package/dist/core/env-defaults.js +5 -3
- package/dist/core/env-defaults.js.map +1 -1
- package/dist/core/file-creation-policy.d.ts.map +1 -1
- package/dist/core/file-creation-policy.js +2 -1
- package/dist/core/file-creation-policy.js.map +1 -1
- package/dist/core/file-materialization.d.ts.map +1 -1
- package/dist/core/file-materialization.js +9 -11
- package/dist/core/file-materialization.js.map +1 -1
- package/dist/core/git-env.d.ts +1 -0
- package/dist/core/git-env.d.ts.map +1 -1
- package/dist/core/git-env.js +34 -3
- package/dist/core/git-env.js.map +1 -1
- package/dist/core/git-membership.d.ts +8 -0
- package/dist/core/git-membership.d.ts.map +1 -1
- package/dist/core/git-membership.js +107 -21
- 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 +1 -0
- package/dist/core/git-state.js.map +1 -1
- package/dist/core/notifications.d.ts +5 -0
- package/dist/core/notifications.d.ts.map +1 -1
- package/dist/core/packet-wire.d.ts +26 -21
- package/dist/core/packet-wire.d.ts.map +1 -1
- package/dist/core/packet-wire.js +150 -112
- package/dist/core/packet-wire.js.map +1 -1
- package/dist/core/plurnk-uri.d.ts +1 -1
- package/dist/core/plurnk-uri.d.ts.map +1 -1
- package/dist/core/plurnk-uri.js +6 -5
- package/dist/core/plurnk-uri.js.map +1 -1
- package/dist/core/results.d.ts +9 -4
- package/dist/core/results.d.ts.map +1 -1
- package/dist/core/results.js +14 -1
- package/dist/core/results.js.map +1 -1
- package/dist/core/runtime-floor.d.ts +8 -0
- package/dist/core/runtime-floor.d.ts.map +1 -0
- package/dist/core/runtime-floor.js +40 -0
- package/dist/core/runtime-floor.js.map +1 -0
- package/dist/core/runtime-guard.d.ts +2 -0
- package/dist/core/runtime-guard.d.ts.map +1 -0
- package/dist/core/runtime-guard.js +5 -0
- package/dist/core/runtime-guard.js.map +1 -0
- package/dist/core/scheme-types.d.ts +20 -0
- package/dist/core/scheme-types.d.ts.map +1 -1
- package/dist/core/sqlite-synchronous.d.ts +1 -1
- package/dist/core/sqlite-synchronous.d.ts.map +1 -1
- package/dist/core/sqlite-synchronous.js.map +1 -1
- package/dist/core/statement-primary.d.ts +2 -2
- package/dist/core/statement-primary.d.ts.map +1 -1
- package/dist/core/statement-primary.js.map +1 -1
- package/dist/core/workspace-settings.js +1 -1
- package/dist/core/workspace-settings.js.map +1 -1
- package/dist/evidence/EvidenceReader.d.ts.map +1 -1
- package/dist/evidence/EvidenceReader.js +20 -6
- package/dist/evidence/EvidenceReader.js.map +1 -1
- package/dist/launch/Launch.d.ts +1 -0
- package/dist/launch/Launch.d.ts.map +1 -1
- package/dist/launch/Launch.js +28 -12
- package/dist/launch/Launch.js.map +1 -1
- package/dist/man/plurnk-service.1 +12 -2
- package/dist/schemes/EffectPolicy.js +1 -1
- package/dist/schemes/EffectPolicy.js.map +1 -1
- package/dist/schemes/Env.d.ts +1 -1
- package/dist/schemes/Env.d.ts.map +1 -1
- package/dist/schemes/Env.js +7 -1
- package/dist/schemes/Env.js.map +1 -1
- package/dist/schemes/Exec.d.ts +10 -12
- package/dist/schemes/Exec.d.ts.map +1 -1
- package/dist/schemes/Exec.js +337 -437
- package/dist/schemes/Exec.js.map +1 -1
- package/dist/schemes/ExecOutputScheme.d.ts +4 -6
- package/dist/schemes/ExecOutputScheme.d.ts.map +1 -1
- package/dist/schemes/ExecOutputScheme.js +17 -17
- package/dist/schemes/ExecOutputScheme.js.map +1 -1
- package/dist/schemes/ExecScheduler.d.ts.map +1 -1
- package/dist/schemes/ExecScheduler.js +1 -2
- package/dist/schemes/ExecScheduler.js.map +1 -1
- package/dist/schemes/ExecutionInput.js +3 -3
- package/dist/schemes/ExecutionInput.js.map +1 -1
- package/dist/schemes/File.d.ts +3 -18
- package/dist/schemes/File.d.ts.map +1 -1
- package/dist/schemes/File.js +148 -84
- package/dist/schemes/File.js.map +1 -1
- package/dist/schemes/Log.d.ts.map +1 -1
- package/dist/schemes/Log.js +193 -161
- package/dist/schemes/Log.js.map +1 -1
- package/dist/schemes/QuestionTool.d.ts.map +1 -1
- package/dist/schemes/QuestionTool.js +6 -8
- package/dist/schemes/QuestionTool.js.map +1 -1
- package/dist/schemes/ResourceTreeScheme.d.ts.map +1 -1
- package/dist/schemes/ResourceTreeScheme.js +2 -2
- package/dist/schemes/ResourceTreeScheme.js.map +1 -1
- package/dist/schemes/TurnSource.js +3 -3
- package/dist/schemes/TurnSource.js.map +1 -1
- package/dist/schemes/Worker.js.map +1 -1
- package/dist/schemes/_entry-crud.d.ts.map +1 -1
- package/dist/schemes/_entry-crud.js +4 -2
- package/dist/schemes/_entry-crud.js.map +1 -1
- package/dist/schemes/_entry-find.d.ts +2 -1
- package/dist/schemes/_entry-find.d.ts.map +1 -1
- package/dist/schemes/_entry-find.js +241 -130
- package/dist/schemes/_entry-find.js.map +1 -1
- package/dist/schemes/_entry-manifest.js +1 -1
- package/dist/schemes/_entry-manifest.js.map +1 -1
- package/dist/schemes/_entry-ops.js.map +1 -1
- package/dist/schemes/_search-index.js.map +1 -1
- package/dist/schemes/exec-entry-sink.d.ts +30 -0
- package/dist/schemes/exec-entry-sink.d.ts.map +1 -0
- package/dist/schemes/exec-entry-sink.js +238 -0
- package/dist/schemes/exec-entry-sink.js.map +1 -0
- package/dist/schemes/exec-lifetime.d.ts.map +1 -1
- package/dist/schemes/exec-lifetime.js +5 -2
- package/dist/schemes/exec-lifetime.js.map +1 -1
- package/dist/server/ClientOperations.d.ts +45 -0
- package/dist/server/ClientOperations.d.ts.map +1 -0
- package/dist/server/ClientOperations.js +192 -0
- package/dist/server/ClientOperations.js.map +1 -0
- package/dist/server/ClientReads.d.ts +13 -5
- package/dist/server/ClientReads.d.ts.map +1 -1
- package/dist/server/ClientReads.js +108 -21
- package/dist/server/ClientReads.js.map +1 -1
- package/dist/server/Credentials.js +2 -2
- package/dist/server/Credentials.js.map +1 -1
- package/dist/server/Daemon.d.ts +40 -28
- package/dist/server/Daemon.d.ts.map +1 -1
- package/dist/server/Daemon.js +263 -839
- package/dist/server/Daemon.js.map +1 -1
- package/dist/server/DaemonLock.d.ts +2 -0
- package/dist/server/DaemonLock.d.ts.map +1 -1
- package/dist/server/DaemonLock.js +10 -1
- package/dist/server/DaemonLock.js.map +1 -1
- package/dist/server/DaemonModules.d.ts +39 -0
- package/dist/server/DaemonModules.d.ts.map +1 -0
- package/dist/server/DaemonModules.js +219 -0
- package/dist/server/DaemonModules.js.map +1 -0
- package/dist/server/DrainSupervisor.d.ts +4 -2
- package/dist/server/DrainSupervisor.d.ts.map +1 -1
- package/dist/server/DrainSupervisor.js +318 -290
- package/dist/server/DrainSupervisor.js.map +1 -1
- package/dist/server/EnvFunctionality.d.ts +10 -7
- package/dist/server/EnvFunctionality.d.ts.map +1 -1
- package/dist/server/EnvFunctionality.js +7 -5
- package/dist/server/EnvFunctionality.js.map +1 -1
- package/dist/server/Functionality.d.ts +4 -5
- package/dist/server/Functionality.d.ts.map +1 -1
- package/dist/server/Functionality.js +24 -15
- package/dist/server/Functionality.js.map +1 -1
- package/dist/server/HttpListener.d.ts.map +1 -1
- package/dist/server/HttpListener.js +28 -8
- package/dist/server/HttpListener.js.map +1 -1
- package/dist/server/MembersFunctionality.d.ts +19 -7
- package/dist/server/MembersFunctionality.d.ts.map +1 -1
- package/dist/server/MembersFunctionality.js +37 -17
- package/dist/server/MembersFunctionality.js.map +1 -1
- package/dist/server/MessageDelivery.d.ts +43 -0
- package/dist/server/MessageDelivery.d.ts.map +1 -0
- package/dist/server/MessageDelivery.js +186 -0
- package/dist/server/MessageDelivery.js.map +1 -0
- package/dist/server/ModuleHost.d.ts +3 -3
- package/dist/server/ModuleHost.d.ts.map +1 -1
- package/dist/server/Places.d.ts +19 -0
- package/dist/server/Places.d.ts.map +1 -0
- package/dist/server/Places.js +76 -0
- package/dist/server/Places.js.map +1 -0
- package/dist/server/PluginSources.d.ts.map +1 -1
- package/dist/server/PluginSources.js +2 -1
- package/dist/server/PluginSources.js.map +1 -1
- package/dist/server/PlurnkSkill.d.ts.map +1 -1
- package/dist/server/PlurnkSkill.js +5 -4
- package/dist/server/PlurnkSkill.js.map +1 -1
- package/dist/server/Rollback.d.ts.map +1 -1
- package/dist/server/Rollback.js +2 -1
- package/dist/server/Rollback.js.map +1 -1
- package/dist/server/WorkerModels.d.ts +83 -0
- package/dist/server/WorkerModels.d.ts.map +1 -0
- package/dist/server/WorkerModels.js +500 -0
- package/dist/server/WorkerModels.js.map +1 -0
- package/dist/server/WorkerOverview.d.ts +22 -0
- package/dist/server/WorkerOverview.d.ts.map +1 -0
- package/dist/server/WorkerOverview.js +42 -0
- package/dist/server/WorkerOverview.js.map +1 -0
- package/dist/server/WorkspacePlugins.d.ts +1 -1
- package/dist/server/WorkspacePlugins.d.ts.map +1 -1
- package/dist/server/WorkspacePlugins.js +0 -1
- package/dist/server/WorkspacePlugins.js.map +1 -1
- package/dist/server/WorkspaceResidency.d.ts +3 -3
- package/dist/server/WorkspaceResidency.d.ts.map +1 -1
- package/dist/server/WorkspaceResidency.js.map +1 -1
- package/dist/server/client-input.d.ts +2 -2
- package/dist/server/client-input.d.ts.map +1 -1
- package/dist/server/client-input.js +19 -12
- package/dist/server/client-input.js.map +1 -1
- package/dist/server/envelope.d.ts +4 -1
- package/dist/server/envelope.d.ts.map +1 -1
- package/dist/server/envelope.js +7 -3
- package/dist/server/envelope.js.map +1 -1
- package/dist/server/envelope.sql +10 -6
- package/dist/server/logEntry.d.ts +38 -1
- package/dist/server/logEntry.d.ts.map +1 -1
- package/dist/server/logEntry.js +9 -9
- package/dist/server/logEntry.js.map +1 -1
- package/dist/server/logEntry.sql +4 -2
- package/dist/server/loopDocs.d.ts.map +1 -1
- package/dist/server/loopDocs.js +11 -2
- package/dist/server/loopDocs.js.map +1 -1
- package/dist/server/module-discovery.d.ts +2 -3
- package/dist/server/module-discovery.d.ts.map +1 -1
- package/dist/server/module-discovery.js +6 -6
- package/dist/server/module-discovery.js.map +1 -1
- package/dist/server/places.sql +83 -0
- package/dist/server/seam-loop.sql +8 -0
- package/dist/server/worker-overview.sql +50 -0
- package/dist/service.d.ts +1 -0
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +35 -9
- package/dist/service.js.map +1 -1
- package/docs/members.md +31 -33
- package/migrations/033_hidden_places.sql +10 -0
- package/package.json +48 -57
- package/dist/observe/init.d.ts +0 -8
- package/dist/observe/init.d.ts.map +0 -1
- package/dist/observe/init.js +0 -163
- package/dist/observe/init.js.map +0 -1
- package/dist/server/WorkerModelResolver.d.ts +0 -20
- package/dist/server/WorkerModelResolver.d.ts.map +0 -1
- package/dist/server/WorkerModelResolver.js +0 -200
- package/dist/server/WorkerModelResolver.js.map +0 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { errnoCode, isRecord } from "@plurnk/plurnk-contracts";
|
|
1
2
|
import { parseEnv } from "node:util";
|
|
2
3
|
import { readFile } from "node:fs/promises";
|
|
3
4
|
import { join } from "node:path";
|
|
@@ -12,13 +13,14 @@ export default class EnvDefaults {
|
|
|
12
13
|
text = await readFile(join(dir, ".env.defaults"), "utf8");
|
|
13
14
|
}
|
|
14
15
|
catch (cause) {
|
|
15
|
-
if (cause
|
|
16
|
+
if (errnoCode(cause) === "ENOENT")
|
|
16
17
|
return null;
|
|
17
18
|
throw new Error(`${owner}: cannot read .env.defaults.`, { cause });
|
|
18
19
|
}
|
|
19
20
|
// parseEnv never throws — it silently mints junk keys from malformed lines. Malformed =
|
|
20
21
|
// any parsed key that isn't a valid env name; crash naming the owner — a broken defaults
|
|
21
22
|
// file is a broken package, never a silently-degraded floor.
|
|
23
|
+
// oxlint-disable-next-line typescript/no-unsafe-type-assertion -- parseEnv's Dict typing admits undefined values its parser never yields
|
|
22
24
|
const parsed = parseEnv(text);
|
|
23
25
|
const junk = Object.keys(parsed).filter((k) => !/^[A-Za-z_][A-Za-z0-9_]*$/.test(k));
|
|
24
26
|
if (junk.length > 0)
|
|
@@ -41,7 +43,7 @@ export default class EnvDefaults {
|
|
|
41
43
|
catch {
|
|
42
44
|
continue;
|
|
43
45
|
}
|
|
44
|
-
if (pkg.plurnk === undefined)
|
|
46
|
+
if (!isRecord(pkg) || pkg.plurnk === undefined)
|
|
45
47
|
continue; // not an ecosystem member
|
|
46
48
|
}
|
|
47
49
|
members.push(candidate);
|
|
@@ -104,7 +106,7 @@ export default class EnvDefaults {
|
|
|
104
106
|
return await EnvDefaults.#readDefaults(directory, owner);
|
|
105
107
|
}
|
|
106
108
|
catch (cause) {
|
|
107
|
-
throw new ConfigurationError(location, `${owner}: native .env.defaults is unavailable: ${cause.message}`, { cause });
|
|
109
|
+
throw new ConfigurationError(location, `${owner}: native .env.defaults is unavailable: ${cause instanceof Error ? cause.message : String(cause)}`, { cause });
|
|
108
110
|
}
|
|
109
111
|
}
|
|
110
112
|
// The ONE law: global key uniqueness. A collision names both claimants — it is also the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env-defaults.js","sourceRoot":"","sources":["../../src/core/env-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,IAAI,EAAE,EAAE,kBAAkB,EAAyB,MAAM,qBAAqB,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,OAAO,SAAS,MAAM,gBAAgB,CAAC;AACvC,OAAO,aAAa,MAAM,4BAA4B,CAAC;AAuBvD,MAAM,CAAC,OAAO,OAAO,WAAW;IAE5B,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,GAAW,EAAE,KAAa;QACjD,IAAI,IAAY,CAAC;QACjB,IAAI,CAAC;YAAC,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC,CAAC;QAAC,CAAC;QAClE,OAAO,KAAK,EAAE,CAAC;YACX,
|
|
1
|
+
{"version":3,"file":"env-defaults.js","sourceRoot":"","sources":["../../src/core/env-defaults.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-creation-policy.d.ts","sourceRoot":"","sources":["../../src/core/file-creation-policy.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,kBAAkB,YAAI,MAAM,EAAE,MAAM,EAAE,WAAW,CAAU,CAAC;AACzE,MAAM,MAAM,eAAe,GAAG,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"file-creation-policy.d.ts","sourceRoot":"","sources":["../../src/core/file-creation-policy.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,kBAAkB,YAAI,MAAM,EAAE,MAAM,EAAE,WAAW,CAAU,CAAC;AACzE,MAAM,MAAM,eAAe,GAAG,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAKhE,MAAM,CAAC,OAAO,OAAO,kBAAkB;IACnC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,CAK1D;IAED,MAAM,CAAC,YAAY,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,eAAe,CAEzE;IAED,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,eAAe,GAAG,IAAI,GAAG,eAAe,CAG7F;IAED,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,OAAO,GAAG,OAAO,CAEnE;CACJ"}
|
|
@@ -4,9 +4,10 @@
|
|
|
4
4
|
import { Knob } from "@plurnk/plurnk-meta";
|
|
5
5
|
export const FILE_CREATE_SCOPES = ["none", "root", "namespace"];
|
|
6
6
|
const rank = new Map(FILE_CREATE_SCOPES.map((scope, index) => [scope, index]));
|
|
7
|
+
const isFileCreateScope = (value) => FILE_CREATE_SCOPES.some((scope) => scope === value);
|
|
7
8
|
export default class FileCreationPolicy {
|
|
8
9
|
static parse(value, name) {
|
|
9
|
-
if (
|
|
10
|
+
if (!isFileCreateScope(value)) {
|
|
10
11
|
throw new TypeError(`${name} must be one of ${FILE_CREATE_SCOPES.join(", ")}; got ${JSON.stringify(value)}`);
|
|
11
12
|
}
|
|
12
13
|
return value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-creation-policy.js","sourceRoot":"","sources":["../../src/core/file-creation-policy.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,sFAAsF;AACtF,uDAAuD;AAEvD,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE3C,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAU,CAAC;AAGzE,MAAM,IAAI,GAAG,IAAI,GAAG,CAA0B,kBAAkB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"file-creation-policy.js","sourceRoot":"","sources":["../../src/core/file-creation-policy.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,sFAAsF;AACtF,uDAAuD;AAEvD,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE3C,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAU,CAAC;AAGzE,MAAM,IAAI,GAAG,IAAI,GAAG,CAA0B,kBAAkB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACxG,MAAM,iBAAiB,GAAG,CAAC,KAAc,EAA4B,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;AAE5H,MAAM,CAAC,OAAO,OAAO,kBAAkB;IACnC,MAAM,CAAC,KAAK,CAAC,KAAc,EAAE,IAAY;QACrC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,mBAAmB,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjH,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;QACpD,OAAO,IAAI,CAAC,MAAM,CAAC,kCAAkC,EAAE,kBAAkB,EAAE,GAAG,CAAC,CAAC;IACpF,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,OAAwB,EAAE,SAAiC;QACxE,IAAI,SAAS,KAAK,IAAI;YAAE,OAAO,OAAO,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;IACvF,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,KAAsB,EAAE,WAAoB;QACtD,OAAO,KAAK,KAAK,WAAW,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,CAAC,WAAW,CAAC,CAAC;IACvE,CAAC;CACJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-materialization.d.ts","sourceRoot":"","sources":["../../src/core/file-materialization.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"file-materialization.d.ts","sourceRoot":"","sources":["../../src/core/file-materialization.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkB,KAAK,UAAU,EAAE,KAAK,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAErG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAM1D,MAAM,WAAW,2BAA2B;IACxC,QAAQ,CAAC,WAAW,EAAE,cAAc,GAAG,aAAa,CAAC;IACrD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,4BAA4B;IACzC,QAAQ,CAAC,IAAI,EAAE,4BAA4B,CAAC;IAC5C,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC1D;AAED,MAAM,CAAC,OAAO,OAAO,mBAAmB;IACpC,OAAa,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAE3F;IAED,OAAa,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAMrH;IAED,MAAM,CAAC,YAAY,IAAI,MAAM,CAM5B;IAED,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,2BAA2B,CAUlE;IAED,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,2BAA2B,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAE1F;IAED,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,2BAA2B,GAAG,IAAI,CAkBzE;IAED,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,2BAA2B,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAK3F;IAED,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,2BAA2B,GAAG,4BAA4B,CAgBtG;IAED,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,2BAA2B,GAAG,qBAAqB,CAU7F;CACJ"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isRecord, isSafeInteger } from "@plurnk/plurnk-contracts";
|
|
1
2
|
import { Knob } from "@plurnk/plurnk-meta";
|
|
2
3
|
import { FileByteSource } from "@plurnk/plurnk-schemes";
|
|
3
4
|
import Results from "./results.js";
|
|
@@ -40,26 +41,23 @@ export default class FileMaterialization {
|
|
|
40
41
|
}
|
|
41
42
|
static fromAttributes(encoded) {
|
|
42
43
|
const attributes = JSON.parse(encoded);
|
|
43
|
-
if (
|
|
44
|
+
if (!isRecord(attributes)) {
|
|
44
45
|
throw new TypeError("File materialization attributes must be a JSON object.");
|
|
45
46
|
}
|
|
46
47
|
const candidate = attributes.sourceMaterialization;
|
|
47
48
|
if (candidate === undefined)
|
|
48
49
|
return null;
|
|
49
|
-
if (
|
|
50
|
+
if (!isRecord(candidate)) {
|
|
50
51
|
throw new TypeError("sourceMaterialization must be a JSON object.");
|
|
51
52
|
}
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
? (metadata.observedBytes ?? 0) > (metadata.maximumBytes ?? 0)
|
|
58
|
-
: (metadata.observedBytes ?? 0) <= (metadata.maximumBytes ?? 0);
|
|
59
|
-
if (!validDisposition || !validMaximum || !validObserved || !limitConsistent) {
|
|
53
|
+
const { disposition, maximumBytes, observedBytes } = candidate;
|
|
54
|
+
if ((disposition !== "materialized" && disposition !== "input-limit")
|
|
55
|
+
|| !isSafeInteger(maximumBytes) || maximumBytes <= 0
|
|
56
|
+
|| !isSafeInteger(observedBytes) || observedBytes < 0
|
|
57
|
+
|| (disposition === "input-limit" ? observedBytes <= maximumBytes : observedBytes > maximumBytes)) {
|
|
60
58
|
throw new TypeError("sourceMaterialization metadata is malformed.");
|
|
61
59
|
}
|
|
62
|
-
return
|
|
60
|
+
return { disposition, maximumBytes, observedBytes };
|
|
63
61
|
}
|
|
64
62
|
static matchesCurrent(metadata, observedBytes) {
|
|
65
63
|
const current = FileMaterialization.classify(observedBytes);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-materialization.js","sourceRoot":"","sources":["../../src/core/file-materialization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAA+C,MAAM,wBAAwB,CAAC;AACrG,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,cAAc,MAAM,+BAA+B,CAAC;AAE3D,MAAM,WAAW,GAAG,2CAA2C,CAAC;AAChE,MAAM,qBAAqB,GAAG,SAAS,CAAC;AAexC,MAAM,CAAC,OAAO,OAAO,mBAAmB;IACpC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,IAAY,EAAE,SAAgC;QACtE,OAAO,mBAAmB,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,cAAc,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;IAC3G,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAY,EAAE,MAAkB,EAAE,SAAgC;QAChG,IAAI,SAAS,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;QAChH,MAAM,QAAQ,GAAG,cAAc,CAAC,yBAAyB,CAAC,MAAM,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC5F,IAAI,MAAM,cAAc,CAAC,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC;YAAE,OAAO,QAAQ,CAAC;QAChF,yFAAyF;QACzF,OAAO,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC5F,CAAC;IAED,MAAM,CAAC,YAAY;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAC3C,IAAI,KAAK,GAAG,qBAAqB,EAAE,CAAC;YAChC,MAAM,IAAI,UAAU,CAAC,GAAG,WAAW,oDAAoD,qBAAqB,SAAS,KAAK,GAAG,CAAC,CAAC;QACnI,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,aAAqB;QACjC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;YAC5D,MAAM,IAAI,UAAU,CAAC,4EAA4E,aAAa,GAAG,CAAC,CAAC;QACvH,CAAC;QACD,MAAM,YAAY,GAAG,mBAAmB,CAAC,YAAY,EAAE,CAAC;QACxD,OAAO;YACH,WAAW,EAAE,aAAa,GAAG,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc;YAC1E,YAAY;YACZ,aAAa;SAChB,CAAC;IACN,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,QAAqC;QACnD,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,CAAC;IAC/C,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,OAAe;QACjC,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"file-materialization.js","sourceRoot":"","sources":["../../src/core/file-materialization.ts"],"names":[],"mappings":"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"}
|
package/dist/core/git-env.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export declare const excludesFile: (env?: NodeJS.ProcessEnv) => string;
|
|
1
2
|
export declare const hermeticGitEnv: (trusted?: string | null) => NodeJS.ProcessEnv;
|
|
2
3
|
export declare const declaredFilterProgram: (repository: string, signal?: AbortSignal) => Promise<string | null>;
|
|
3
4
|
export declare const gitOutputMaxBytes: () => number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-env.d.ts","sourceRoot":"","sources":["../../src/core/git-env.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"git-env.d.ts","sourceRoot":"","sources":["../../src/core/git-env.ts"],"names":[],"mappings":"AAyBA,eAAO,MAAM,YAAY,SAAS,MAAM,CAAC,UAAU,KAAiB,MAmBnE,CAAC;AAMF,eAAO,MAAM,cAAc,aAAa,MAAM,GAAG,IAAI,KAAU,MAAM,CAAC,UAcrE,CAAC;AAQF,eAAO,MAAM,qBAAqB,eAAsB,MAAM,WAAW,WAAW,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAW3G,CAAC;AAEF,eAAO,MAAM,iBAAiB,QAAO,MAAgE,CAAC"}
|
package/dist/core/git-env.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
import { isRecord } from "@plurnk/plurnk-contracts";
|
|
1
2
|
import { Knob } from "@plurnk/plurnk-meta";
|
|
2
|
-
import { execFile } from "node:child_process";
|
|
3
|
+
import { execFile, execFileSync } from "node:child_process";
|
|
4
|
+
import { homedir } from "node:os";
|
|
5
|
+
import { isAbsolute, join } from "node:path";
|
|
3
6
|
import { promisify } from "node:util";
|
|
4
7
|
const execFileP = promisify(execFile);
|
|
5
8
|
// {§membership-git-hermetic} — native Git receives no ambient GIT_* or
|
|
@@ -13,12 +16,40 @@ const PINNED_CONFIG = Object.freeze([
|
|
|
13
16
|
["core.fsmonitor", "false"],
|
|
14
17
|
["core.hooksPath", "/dev/null"],
|
|
15
18
|
]);
|
|
19
|
+
// {§membership-git-hermetic} The daemon user's excludes file is the one global setting native Git keeps, so a model
|
|
20
|
+
// sees what that user's git shows: the configured `core.excludesFile`, else git's default beneath the XDG
|
|
21
|
+
// configuration home (#1181). Resolved once per home.
|
|
22
|
+
const excludesFiles = new Map();
|
|
23
|
+
export const excludesFile = (env = process.env) => {
|
|
24
|
+
const home = env.HOME ?? homedir();
|
|
25
|
+
const xdg = env.XDG_CONFIG_HOME;
|
|
26
|
+
const key = `${home}\u0000${xdg ?? ""}`;
|
|
27
|
+
const known = excludesFiles.get(key);
|
|
28
|
+
if (known !== undefined)
|
|
29
|
+
return known;
|
|
30
|
+
let configured = "";
|
|
31
|
+
try {
|
|
32
|
+
configured = execFileSync("git", ["-C", "/", "config", "--path", "--get", "core.excludesFile"], {
|
|
33
|
+
env: Object.fromEntries(Object.entries(env).filter(([name]) => !name.startsWith("GIT_"))),
|
|
34
|
+
encoding: "utf8", stdio: ["ignore", "pipe", "ignore"],
|
|
35
|
+
}).trim();
|
|
36
|
+
}
|
|
37
|
+
catch (cause) {
|
|
38
|
+
// Exit 1 is an unset key; git absent leaves its default, and every later Git call reports its absence.
|
|
39
|
+
if (!(isRecord(cause) && (cause.status === 1 || cause.code === "ENOENT")))
|
|
40
|
+
throw new Error("Git's excludes file could not be read.", { cause });
|
|
41
|
+
}
|
|
42
|
+
const resolved = configured.length > 0 ? configured : join(xdg !== undefined && isAbsolute(xdg) ? xdg : join(home, ".config"), "git", "ignore");
|
|
43
|
+
excludesFiles.set(key, resolved);
|
|
44
|
+
return resolved;
|
|
45
|
+
};
|
|
16
46
|
// `trusted` is the repository the daemon was pointed at, pinned as `safe.directory`: git's ownership
|
|
17
47
|
// check otherwise refuses a repository another account owns, which is exactly the shape when the
|
|
18
48
|
// model's commands own the workspace ({§executor-spawn-account}). The daemon trusts the root it
|
|
19
49
|
// was given, nothing wider; the blanked global and system configuration cannot grant it.
|
|
20
50
|
export const hermeticGitEnv = (trusted = null) => {
|
|
21
|
-
const
|
|
51
|
+
const kept = [...PINNED_CONFIG, ["core.excludesFile", excludesFile()]];
|
|
52
|
+
const pins = trusted === null ? kept : [...kept, ["safe.directory", trusted]];
|
|
22
53
|
return {
|
|
23
54
|
...Object.fromEntries(Object.entries(process.env).filter(([k]) => !k.startsWith("GIT_"))),
|
|
24
55
|
GIT_CONFIG_GLOBAL: "/dev/null",
|
|
@@ -46,7 +77,7 @@ export const declaredFilterProgram = async (repository, signal) => {
|
|
|
46
77
|
return first === undefined ? null : first.split(" ", 1)[0];
|
|
47
78
|
}
|
|
48
79
|
catch (cause) {
|
|
49
|
-
if (cause.code === 1)
|
|
80
|
+
if (isRecord(cause) && cause.code === 1)
|
|
50
81
|
return null; // no such key
|
|
51
82
|
throw new Error(`Git configuration inspection failed for '${repository}'.`, { cause });
|
|
52
83
|
}
|
package/dist/core/git-env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-env.js","sourceRoot":"","sources":["../../src/core/git-env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"git-env.js","sourceRoot":"","sources":["../../src/core/git-env.ts"],"names":[],"mappings":"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"}
|
|
@@ -53,14 +53,22 @@ export type FileCreationIncorporation = {
|
|
|
53
53
|
export default class GitMembership {
|
|
54
54
|
#private;
|
|
55
55
|
static projectRepository(db: Db, workspaceId: number, signal?: AbortSignal): Promise<string | null>;
|
|
56
|
+
static exclusionOf(db: Db, workspaceId: number, key: string): Promise<string | null>;
|
|
56
57
|
static excludesInstruction(db: Db, workspaceId: number, key: string, signal?: AbortSignal): Promise<boolean>;
|
|
57
58
|
static planCreation(db: Db, workspaceId: number, key: string, signal?: AbortSignal): Promise<FileCreationAdmission>;
|
|
58
59
|
static incorporateCreation(db: Db, workspaceId: number, entryId: number, key: string, admission: Extract<FileCreationAdmission, {
|
|
59
60
|
ok: true;
|
|
60
61
|
}>): Promise<FileCreationIncorporation>;
|
|
61
62
|
static removeCreationRecord(db: Db, workspaceId: number, key: string): Promise<unknown>;
|
|
63
|
+
static workspaceRoot(db: Db, workspaceId: number): Promise<string | null>;
|
|
64
|
+
static ambientCandidates(db: Db, workspaceId: number, prefix: string | null, signal: AbortSignal | undefined): Promise<string[]>;
|
|
65
|
+
static isAmbientCandidate(db: Db, workspaceId: number, key: string, signal: AbortSignal | undefined): Promise<boolean>;
|
|
62
66
|
static resolveGitMembership(db: Db, workspaceId: number, signal: AbortSignal | undefined): Promise<string[]>;
|
|
63
67
|
static resolveOverlay(db: Db, workspaceId: number, rows: readonly OverlayRow[] | undefined, signal: AbortSignal | undefined): Promise<OverlayResolution | null>;
|
|
68
|
+
static ignoreSource(db: Db, workspaceId: number, key: string, signal: AbortSignal | undefined): Promise<{
|
|
69
|
+
file: string;
|
|
70
|
+
line: number;
|
|
71
|
+
} | null>;
|
|
64
72
|
static isIgnored(db: Db, workspaceId: number, key: string, signal: AbortSignal | undefined): Promise<boolean | null>;
|
|
65
73
|
static scanPattern(root: string, pattern: string, signal: AbortSignal | undefined): Promise<string[]>;
|
|
66
74
|
static ignoredSubset(db: Db, workspaceId: number, paths: readonly string[], signal: AbortSignal | undefined): Promise<Set<string>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-membership.d.ts","sourceRoot":"","sources":["../../src/core/git-membership.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"git-membership.d.ts","sourceRoot":"","sources":["../../src/core/git-membership.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,10 +19,12 @@
|
|
|
19
19
|
//
|
|
20
20
|
// Git resolution uses native Git (subprocess + hermeticGitEnv,
|
|
21
21
|
// AbortSignal-respecting).
|
|
22
|
+
import { errnoCode, isRecord } from "@plurnk/plurnk-contracts";
|
|
22
23
|
import { execFile, spawn } from "node:child_process";
|
|
23
24
|
import { declaredFilterProgram, gitOutputMaxBytes, hermeticGitEnv } from "./git-env.js";
|
|
24
25
|
import { promisify } from "node:util";
|
|
25
26
|
import { stat } from "node:fs/promises";
|
|
27
|
+
import { homedir } from "node:os";
|
|
26
28
|
import { resolve, relative, isAbsolute } from "node:path";
|
|
27
29
|
import PathGlob from "./PathGlob.js";
|
|
28
30
|
import WorkspaceSettings from "./workspace-settings.js";
|
|
@@ -70,7 +72,8 @@ export default class GitMembership {
|
|
|
70
72
|
catch (cause) {
|
|
71
73
|
// {§membership-git-hermetic} — a repository git refuses as another account's is not "no repository":
|
|
72
74
|
// the daemon was pointed at it and cannot read it, which the operator must hear.
|
|
73
|
-
const
|
|
75
|
+
const raw = isRecord(cause) ? cause.stderr : undefined;
|
|
76
|
+
const stderr = typeof raw === "string" ? raw : Buffer.isBuffer(raw) ? raw.toString("utf8") : "";
|
|
74
77
|
if (/dubious ownership/u.test(stderr)) {
|
|
75
78
|
throw new Error(`Git refuses the repository at '${dir}' as owned by another account; point the workspace at the repository root or own it. ${stderr.split("\n")[0]}`, { cause });
|
|
76
79
|
}
|
|
@@ -119,16 +122,20 @@ export default class GitMembership {
|
|
|
119
122
|
return true;
|
|
120
123
|
}
|
|
121
124
|
catch (cause) {
|
|
122
|
-
if (cause.code === 1)
|
|
125
|
+
if (isRecord(cause) && cause.code === 1)
|
|
123
126
|
return false;
|
|
124
127
|
throw new Error(`Git ignore classification failed for '${key}'.`, { cause });
|
|
125
128
|
}
|
|
126
129
|
}
|
|
130
|
+
// The exclusion (`!glob`) covering the path, if one does: it outranks every inclusion and every instruction standard.
|
|
131
|
+
static async exclusionOf(db, workspaceId, key) {
|
|
132
|
+
return (await db.crud_constraint_excluding.get({ workspace_id: workspaceId, key }))?.glob ?? null;
|
|
133
|
+
}
|
|
127
134
|
// {§membership-model-universe} entry (3): a standards-backed instruction file (AGENTS.md) is
|
|
128
135
|
// projected from disk, but the standard never outranks the operator's exclusions — a path the
|
|
129
136
|
// active repository ignores, or an exclusion matches, contributes nothing.
|
|
130
137
|
static async excludesInstruction(db, workspaceId, key, signal) {
|
|
131
|
-
if (await
|
|
138
|
+
if (await GitMembership.exclusionOf(db, workspaceId, key) !== null)
|
|
132
139
|
return true;
|
|
133
140
|
const root = await GitMembership.#loadWorkspaceRoot(db, workspaceId);
|
|
134
141
|
if (root === null)
|
|
@@ -166,16 +173,16 @@ export default class GitMembership {
|
|
|
166
173
|
},
|
|
167
174
|
};
|
|
168
175
|
}
|
|
169
|
-
const exclusion = await
|
|
170
|
-
if (exclusion !==
|
|
176
|
+
const exclusion = await GitMembership.exclusionOf(db, workspaceId, key);
|
|
177
|
+
if (exclusion !== null) {
|
|
171
178
|
return {
|
|
172
179
|
ok: false,
|
|
173
180
|
code: "file-create-excluded",
|
|
174
181
|
status: 403,
|
|
175
|
-
detail: `A members exclusion (\`!${exclusion
|
|
182
|
+
detail: `A members exclusion (\`!${exclusion}\`) covers '${key}'.`,
|
|
176
183
|
extensions: {
|
|
177
184
|
path: key,
|
|
178
|
-
glob: exclusion
|
|
185
|
+
glob: exclusion,
|
|
179
186
|
recovery: "Remove or disable the excluding members definition, or choose another path.",
|
|
180
187
|
retryable: false,
|
|
181
188
|
},
|
|
@@ -297,7 +304,7 @@ export default class GitMembership {
|
|
|
297
304
|
continue;
|
|
298
305
|
}
|
|
299
306
|
catch (cause) {
|
|
300
|
-
if (cause
|
|
307
|
+
if (errnoCode(cause) !== "ENOENT")
|
|
301
308
|
throw cause;
|
|
302
309
|
}
|
|
303
310
|
await GitMembership.removeCreationRecord(db, workspaceId, key);
|
|
@@ -351,11 +358,63 @@ export default class GitMembership {
|
|
|
351
358
|
// A path that left Git/include membership also left disk truth (for example an untracked
|
|
352
359
|
// deletion or staged rename). An exclusion is policy, not a filesystem occurrence, and is
|
|
353
360
|
// therefore silent.
|
|
354
|
-
const removed = gone
|
|
355
|
-
|
|
356
|
-
|
|
361
|
+
const removed = gone.flatMap(({ id, pathname, prior }) => prior !== null && !candidateSet.has(pathname)
|
|
362
|
+
? [{ pathname, entryId: id, channel: "body", before: prior, after: "" }]
|
|
363
|
+
: []);
|
|
357
364
|
return { members: desired, removed, ...(refusedFilter === null ? {} : { refusedFilter }) };
|
|
358
365
|
}
|
|
366
|
+
static workspaceRoot(db, workspaceId) {
|
|
367
|
+
return GitMembership.#loadWorkspaceRoot(db, workspaceId);
|
|
368
|
+
}
|
|
369
|
+
// {§membership-auto-add} — the model's universe beyond membership: files inside the root that the
|
|
370
|
+
// repository neither tracks nor ignores (every file, when no repository governs the root), minus
|
|
371
|
+
// every exclusion, under a literal path prefix. None is a member; nothing here is materialized.
|
|
372
|
+
static async ambientCandidates(db, workspaceId, prefix, signal) {
|
|
373
|
+
const root = await GitMembership.#loadWorkspaceRoot(db, workspaceId);
|
|
374
|
+
if (root === null)
|
|
375
|
+
return [];
|
|
376
|
+
const literal = prefix === null || prefix === "" ? "" : prefix;
|
|
377
|
+
if (literal.startsWith("../") || literal === "..")
|
|
378
|
+
return [];
|
|
379
|
+
const directory = literal.includes("/") ? literal.slice(0, literal.lastIndexOf("/")) : "";
|
|
380
|
+
const constraints = await db.crud_list_workspace_constraints.all({ workspace_id: workspaceId });
|
|
381
|
+
const excludeGlobs = constraints.filter((c) => c.effect === "exclude").map((c) => c.glob);
|
|
382
|
+
const repository = await GitMembership.#activeAutomaticRepository(db, workspaceId, root, signal);
|
|
383
|
+
const files = repository === null
|
|
384
|
+
? await GitMembership.#scanIncluded(root, [directory === "" ? "**" : `${directory}/**`], signal)
|
|
385
|
+
: await GitMembership.#gitUntrackedFiles(root, directory, signal);
|
|
386
|
+
return files
|
|
387
|
+
.filter((pathname) => pathname.startsWith(literal) && !excludeGlobs.some((glob) => PathGlob.matches(pathname, glob)))
|
|
388
|
+
.toSorted();
|
|
389
|
+
}
|
|
390
|
+
// {§membership-auto-add} — whether one key is in that universe: inside the root, a file, unexcluded,
|
|
391
|
+
// and not ignored by the governing repository.
|
|
392
|
+
static async isAmbientCandidate(db, workspaceId, key, signal) {
|
|
393
|
+
if (key === "" || key === ".." || key.startsWith("../") || isAbsolute(key))
|
|
394
|
+
return false;
|
|
395
|
+
const root = await GitMembership.#loadWorkspaceRoot(db, workspaceId);
|
|
396
|
+
if (root === null)
|
|
397
|
+
return false;
|
|
398
|
+
try {
|
|
399
|
+
if (!(await stat(resolve(root, key))).isFile())
|
|
400
|
+
return false;
|
|
401
|
+
}
|
|
402
|
+
catch {
|
|
403
|
+
return false;
|
|
404
|
+
}
|
|
405
|
+
const constraints = await db.crud_list_workspace_constraints.all({ workspace_id: workspaceId });
|
|
406
|
+
if (constraints.some((c) => c.effect === "exclude" && PathGlob.matches(key, c.glob)))
|
|
407
|
+
return false;
|
|
408
|
+
const repository = await GitMembership.#activeAutomaticRepository(db, workspaceId, root, signal);
|
|
409
|
+
return repository === null || (await GitMembership.#isIgnoredByRepository(root, repository, key, signal)) !== true;
|
|
410
|
+
}
|
|
411
|
+
// Untracked, unignored files under one directory of the root: `git ls-files --others
|
|
412
|
+
// --exclude-standard`, cwd-relative like the tracked listing. A nested repository is a boundary
|
|
413
|
+
// (listed as a directory) and is dropped.
|
|
414
|
+
static async #gitUntrackedFiles(root, directory, signal) {
|
|
415
|
+
const { stdout } = await GitMembership.#execFileP("git", ["ls-files", "--others", "--exclude-standard", "-z", "--", directory === "" ? "." : directory], { cwd: root, signal, maxBuffer: gitOutputMaxBytes(), env: hermeticGitEnv(root) });
|
|
416
|
+
return stdout.split("\0").filter((entry) => entry.length > 0 && !entry.endsWith("/"));
|
|
417
|
+
}
|
|
359
418
|
static async resolveGitMembership(db, workspaceId, signal) {
|
|
360
419
|
return (await GitMembership.#reconcileGitMembership(db, workspaceId, signal)).members;
|
|
361
420
|
}
|
|
@@ -381,6 +440,27 @@ export default class GitMembership {
|
|
|
381
440
|
excludeGlobs,
|
|
382
441
|
};
|
|
383
442
|
}
|
|
443
|
+
// {§membership-ignore-source} The ignore rule that excludes `key`, as git reports it: its file, shown beneath the
|
|
444
|
+
// repository or the home as `~/`, and its line; null when nothing ignores it or no automatic repository governs it.
|
|
445
|
+
static async ignoreSource(db, workspaceId, key, signal) {
|
|
446
|
+
const root = await GitMembership.#loadWorkspaceRoot(db, workspaceId);
|
|
447
|
+
if (root === null)
|
|
448
|
+
return null;
|
|
449
|
+
const repository = await GitMembership.#activeAutomaticRepository(db, workspaceId, root, signal);
|
|
450
|
+
if (repository === null)
|
|
451
|
+
return null;
|
|
452
|
+
const repositoryPath = relative(repository, resolve(root, key));
|
|
453
|
+
if (repositoryPath === "" || repositoryPath.startsWith("..") || isAbsolute(repositoryPath))
|
|
454
|
+
return null;
|
|
455
|
+
// `<source> NUL <line> NUL <pattern> NUL <path> NUL`; no output, nothing ignores it; a negated pattern's match is
|
|
456
|
+
// a path re-included.
|
|
457
|
+
const [source = "", line = "", pattern = ""] = (await GitMembership.#checkIgnore(repository, [repositoryPath], true, signal)).split("\u0000");
|
|
458
|
+
if (source.length === 0 || pattern.startsWith("!"))
|
|
459
|
+
return null;
|
|
460
|
+
const home = homedir();
|
|
461
|
+
const file = isAbsolute(source) && (source === home || source.startsWith(`${home}/`)) ? `~/${relative(home, source)}` : source;
|
|
462
|
+
return { file, line: Number(line) };
|
|
463
|
+
}
|
|
384
464
|
// Whether the active repository ignores `key`; null when no automatic repository governs it.
|
|
385
465
|
static async isIgnored(db, workspaceId, key, signal) {
|
|
386
466
|
const root = await GitMembership.#loadWorkspaceRoot(db, workspaceId);
|
|
@@ -415,25 +495,31 @@ export default class GitMembership {
|
|
|
415
495
|
}
|
|
416
496
|
if (keys.size === 0)
|
|
417
497
|
return ignored;
|
|
418
|
-
const
|
|
498
|
+
for (const repositoryPath of (await GitMembership.#checkIgnore(repository, [...keys.keys()], false, signal)).split("\0")) {
|
|
499
|
+
const key = keys.get(repositoryPath);
|
|
500
|
+
if (key !== undefined)
|
|
501
|
+
ignored.add(key);
|
|
502
|
+
}
|
|
503
|
+
return ignored;
|
|
504
|
+
}
|
|
505
|
+
// One `git check-ignore --stdin -z` pass over repository paths, verbose when the rule that matched is wanted.
|
|
506
|
+
static async #checkIgnore(repository, paths, verbose, signal) {
|
|
507
|
+
const child = spawn("git", ["check-ignore", ...(verbose ? ["-v"] : []), "-z", "--stdin"], {
|
|
508
|
+
cwd: repository, env: hermeticGitEnv(repository), signal, stdio: ["pipe", "pipe", "pipe"],
|
|
509
|
+
});
|
|
419
510
|
const out = [];
|
|
420
511
|
const err = [];
|
|
421
512
|
child.stdout.on("data", (chunk) => out.push(chunk));
|
|
422
513
|
child.stderr.on("data", (chunk) => err.push(chunk));
|
|
423
|
-
child.stdin.end(`${
|
|
514
|
+
child.stdin.end(`${paths.join("\0")}\0`);
|
|
424
515
|
const code = await new Promise((settle, reject) => {
|
|
425
516
|
child.once("error", reject);
|
|
426
517
|
child.once("close", settle);
|
|
427
518
|
});
|
|
428
|
-
// 0: some path
|
|
519
|
+
// 0: some path matched; 1: none did. Anything else is a failed subprocess.
|
|
429
520
|
if (code !== 0 && code !== 1)
|
|
430
521
|
throw new Error(`git check-ignore failed (${code}): ${Buffer.concat(err).toString("utf8").trim()}`);
|
|
431
|
-
|
|
432
|
-
const key = keys.get(repositoryPath);
|
|
433
|
-
if (key !== undefined)
|
|
434
|
-
ignored.add(key);
|
|
435
|
-
}
|
|
436
|
-
return ignored;
|
|
522
|
+
return Buffer.concat(out).toString("utf8");
|
|
437
523
|
}
|
|
438
524
|
// Targeted definition scan (SPEC {§membership} `include`) — enumerate disk files
|
|
439
525
|
// matching {§path-glob-matching} (the pattern bounds the
|
|
@@ -468,7 +554,7 @@ export default class GitMembership {
|
|
|
468
554
|
matches.push(key);
|
|
469
555
|
}
|
|
470
556
|
catch (cause) {
|
|
471
|
-
if (cause
|
|
557
|
+
if (errnoCode(cause) !== "ENOENT")
|
|
472
558
|
throw cause;
|
|
473
559
|
}
|
|
474
560
|
}
|