@noopolis/daimon 0.1.2 → 0.2.1
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/README.md +275 -51
- package/dist/contracts/attentionContract.d.ts +142 -0
- package/dist/contracts/attentionContract.d.ts.map +1 -0
- package/dist/contracts/attentionContract.js +21 -0
- package/dist/contracts/canonicalJson.d.ts +3 -0
- package/dist/contracts/canonicalJson.d.ts.map +1 -0
- package/dist/contracts/canonicalJson.js +54 -0
- package/dist/contracts/grokBrokerTaskClock.d.ts +18 -0
- package/dist/contracts/grokBrokerTaskClock.d.ts.map +1 -0
- package/dist/contracts/grokBrokerTaskClock.js +16 -0
- package/dist/contracts/grokWorkerContract.d.ts +74 -0
- package/dist/contracts/grokWorkerContract.d.ts.map +1 -0
- package/dist/contracts/grokWorkerContract.js +88 -0
- package/dist/contracts/organizationRuntimeContract.d.ts +841 -0
- package/dist/contracts/organizationRuntimeContract.d.ts.map +1 -0
- package/dist/contracts/organizationRuntimeContract.js +123 -0
- package/dist/contracts/runtimeContractManifest.d.ts +1822 -0
- package/dist/contracts/runtimeContractManifest.d.ts.map +1 -0
- package/dist/contracts/runtimeContractManifest.js +206 -0
- package/dist/contracts/shellEnvironmentPolicy.d.ts +3 -0
- package/dist/contracts/shellEnvironmentPolicy.d.ts.map +1 -0
- package/dist/contracts/shellEnvironmentPolicy.js +5 -0
- package/dist/contracts/wakeMomentContract.d.ts +61 -0
- package/dist/contracts/wakeMomentContract.d.ts.map +1 -0
- package/dist/contracts/wakeMomentContract.js +27 -0
- package/dist/core/credentialRedaction.d.ts +4 -0
- package/dist/core/credentialRedaction.d.ts.map +1 -0
- package/dist/core/credentialRedaction.js +28 -0
- package/dist/core/types.d.ts +2 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/examples/jungianPlayAgent.d.ts +1 -0
- package/dist/examples/jungianPlayAgent.d.ts.map +1 -1
- package/dist/examples/jungianPlayAgent.js +6 -2
- package/dist/mcp/toolServer.d.ts +19 -2
- package/dist/mcp/toolServer.d.ts.map +1 -1
- package/dist/mcp/toolServer.js +57 -17
- package/dist/observability/causalEvents.d.ts +6 -6
- package/dist/observability/causalEvents.d.ts.map +1 -1
- package/dist/observability/causalEvents.js +107 -19
- package/dist/observability/orgObserver.d.ts.map +1 -1
- package/dist/observability/orgObserver.js +3 -3
- package/dist/pi/agyHeadlessResult.d.ts +60 -0
- package/dist/pi/agyHeadlessResult.d.ts.map +1 -0
- package/dist/pi/agyHeadlessResult.js +95 -0
- package/dist/pi/cliChildOutput.d.ts +67 -0
- package/dist/pi/cliChildOutput.d.ts.map +1 -0
- package/dist/pi/cliChildOutput.js +269 -0
- package/dist/pi/cliEngineRun.d.ts +16 -0
- package/dist/pi/cliEngineRun.d.ts.map +1 -0
- package/dist/pi/cliEngineRun.js +27 -0
- package/dist/pi/cliEngineSpawn.d.ts +55 -0
- package/dist/pi/cliEngineSpawn.d.ts.map +1 -0
- package/dist/pi/cliEngineSpawn.js +169 -0
- package/dist/pi/cliEnvironment.d.ts +12 -0
- package/dist/pi/cliEnvironment.d.ts.map +1 -0
- package/dist/pi/cliEnvironment.js +34 -0
- package/dist/pi/cliMcpRegistration.d.ts +61 -0
- package/dist/pi/cliMcpRegistration.d.ts.map +1 -0
- package/dist/pi/cliMcpRegistration.js +75 -0
- package/dist/pi/cliProcess.d.ts +7 -0
- package/dist/pi/cliProcess.d.ts.map +1 -0
- package/dist/pi/cliProcess.js +132 -0
- package/dist/pi/cliSession.d.ts +86 -24
- package/dist/pi/cliSession.d.ts.map +1 -1
- package/dist/pi/cliSession.js +251 -173
- package/dist/pi/cliSessionMcp.d.ts +9 -0
- package/dist/pi/cliSessionMcp.d.ts.map +1 -0
- package/dist/pi/cliSessionMcp.js +80 -0
- package/dist/pi/cliTurnMetering.d.ts +60 -0
- package/dist/pi/cliTurnMetering.d.ts.map +1 -0
- package/dist/pi/cliTurnMetering.js +60 -0
- package/dist/pi/codexFilesystemRules.d.ts +3 -0
- package/dist/pi/codexFilesystemRules.d.ts.map +1 -0
- package/dist/pi/codexFilesystemRules.js +28 -0
- package/dist/pi/codexHeadlessResult.d.ts +68 -0
- package/dist/pi/codexHeadlessResult.d.ts.map +1 -0
- package/dist/pi/codexHeadlessResult.js +122 -0
- package/dist/pi/codexRolloutUsage.d.ts +95 -0
- package/dist/pi/codexRolloutUsage.d.ts.map +1 -0
- package/dist/pi/codexRolloutUsage.js +221 -0
- package/dist/pi/engineTaskClock.d.ts +9 -0
- package/dist/pi/engineTaskClock.d.ts.map +1 -0
- package/dist/pi/engineTaskClock.js +28 -0
- package/dist/pi/engineWakeLimits.d.ts +39 -0
- package/dist/pi/engineWakeLimits.d.ts.map +1 -0
- package/dist/pi/engineWakeLimits.js +55 -0
- package/dist/pi/grokHeadlessResult.d.ts +36 -0
- package/dist/pi/grokHeadlessResult.d.ts.map +1 -0
- package/dist/pi/grokHeadlessResult.js +118 -0
- package/dist/pi/grokHomeMcpRegistration.d.ts +21 -0
- package/dist/pi/grokHomeMcpRegistration.d.ts.map +1 -0
- package/dist/pi/grokHomeMcpRegistration.js +58 -0
- package/dist/pi/grokSandbox.d.ts +11 -0
- package/dist/pi/grokSandbox.d.ts.map +1 -0
- package/dist/pi/grokSandbox.js +216 -0
- package/dist/pi/grokStreamUsage.d.ts +31 -0
- package/dist/pi/grokStreamUsage.d.ts.map +1 -0
- package/dist/pi/grokStreamUsage.js +51 -0
- package/dist/pi/memoryClock.d.ts +25 -0
- package/dist/pi/memoryClock.d.ts.map +1 -0
- package/dist/pi/memoryClock.js +18 -0
- package/dist/pi/piAgentHandle.d.ts +6 -3
- package/dist/pi/piAgentHandle.d.ts.map +1 -1
- package/dist/pi/piAgentHandle.js +42 -12
- package/dist/pi/piAgentWakeSupport.d.ts +35 -0
- package/dist/pi/piAgentWakeSupport.d.ts.map +1 -1
- package/dist/pi/piAgentWakeSupport.js +4 -0
- package/dist/pi/piHarness.d.ts +18 -3
- package/dist/pi/piHarness.d.ts.map +1 -1
- package/dist/pi/piHarness.js +83 -14
- package/dist/pi/prompts.d.ts +1 -0
- package/dist/pi/prompts.d.ts.map +1 -1
- package/dist/pi/prompts.js +24 -0
- package/dist/pi/taskClockProcess.d.ts +6 -0
- package/dist/pi/taskClockProcess.d.ts.map +1 -0
- package/dist/pi/taskClockProcess.js +8 -0
- package/dist/pi/turnCausal.d.ts +4 -2
- package/dist/pi/turnCausal.d.ts.map +1 -1
- package/dist/pi/turnCausal.js +4 -4
- package/dist/pi/turnTrace.d.ts.map +1 -1
- package/dist/pi/turnTrace.js +5 -8
- package/dist/pi/wakeAcceptance.d.ts +1 -1
- package/dist/pi/wakeAcceptance.d.ts.map +1 -1
- package/dist/pi/wakeAcceptance.js +2 -2
- package/dist/pi/worldTrajectory.d.ts +1 -1
- package/dist/pi/worldTrajectory.d.ts.map +1 -1
- package/dist/pi/worldTrajectory.js +3 -3
- package/dist/runtime/agySubscriptionBootstrap.d.ts +16 -0
- package/dist/runtime/agySubscriptionBootstrap.d.ts.map +1 -0
- package/dist/runtime/agySubscriptionBootstrap.js +80 -0
- package/dist/runtime/agySubscriptionRealm.d.ts +38 -0
- package/dist/runtime/agySubscriptionRealm.d.ts.map +1 -0
- package/dist/runtime/agySubscriptionRealm.js +242 -0
- package/dist/runtime/attention.d.ts +26 -0
- package/dist/runtime/attention.d.ts.map +1 -0
- package/dist/runtime/attention.js +49 -0
- package/dist/runtime/attentionDispatcher.d.ts +78 -0
- package/dist/runtime/attentionDispatcher.d.ts.map +1 -0
- package/dist/runtime/attentionDispatcher.js +365 -0
- package/dist/runtime/cli.d.ts +7 -0
- package/dist/runtime/cli.d.ts.map +1 -0
- package/dist/runtime/cli.js +256 -0
- package/dist/runtime/codexSandboxProjection.d.ts +17 -0
- package/dist/runtime/codexSandboxProjection.d.ts.map +1 -0
- package/dist/runtime/codexSandboxProjection.js +40 -0
- package/dist/runtime/contract-manifest.json +1 -0
- package/dist/runtime/contract-manifest.sha256 +1 -0
- package/dist/runtime/contractManifest.d.ts +8 -0
- package/dist/runtime/contractManifest.d.ts.map +1 -0
- package/dist/runtime/contractManifest.js +4 -0
- package/dist/runtime/engineBrokerCapabilities.d.ts +40 -0
- package/dist/runtime/engineBrokerCapabilities.d.ts.map +1 -0
- package/dist/runtime/engineBrokerCapabilities.js +69 -0
- package/dist/runtime/engineBrokerControlClient.d.ts +55 -0
- package/dist/runtime/engineBrokerControlClient.d.ts.map +1 -0
- package/dist/runtime/engineBrokerControlClient.js +228 -0
- package/dist/runtime/engineBrokerCredentialJournal.d.ts +12 -0
- package/dist/runtime/engineBrokerCredentialJournal.d.ts.map +1 -0
- package/dist/runtime/engineBrokerCredentialJournal.js +26 -0
- package/dist/runtime/engineBrokerInferenceProtocol.d.ts +53 -0
- package/dist/runtime/engineBrokerInferenceProtocol.d.ts.map +1 -0
- package/dist/runtime/engineBrokerInferenceProtocol.js +65 -0
- package/dist/runtime/engineBrokerMcpCallLog.d.ts +171 -0
- package/dist/runtime/engineBrokerMcpCallLog.d.ts.map +1 -0
- package/dist/runtime/engineBrokerMcpCallLog.js +231 -0
- package/dist/runtime/engineBrokerMcpFacade.d.ts +59 -0
- package/dist/runtime/engineBrokerMcpFacade.d.ts.map +1 -0
- package/dist/runtime/engineBrokerMcpFacade.js +346 -0
- package/dist/runtime/engineBrokerNativeClient.d.ts +52 -0
- package/dist/runtime/engineBrokerNativeClient.d.ts.map +1 -0
- package/dist/runtime/engineBrokerNativeClient.js +151 -0
- package/dist/runtime/engineBrokerProtocol.d.ts +167 -0
- package/dist/runtime/engineBrokerProtocol.d.ts.map +1 -0
- package/dist/runtime/engineBrokerProtocol.js +357 -0
- package/dist/runtime/engineBrokerSealLedger.d.ts +70 -0
- package/dist/runtime/engineBrokerSealLedger.d.ts.map +1 -0
- package/dist/runtime/engineBrokerSealLedger.js +132 -0
- package/dist/runtime/engineBrokerService.d.ts +43 -0
- package/dist/runtime/engineBrokerService.d.ts.map +1 -0
- package/dist/runtime/engineBrokerService.js +196 -0
- package/dist/runtime/engineBrokerServiceCli.d.ts +5 -0
- package/dist/runtime/engineBrokerServiceCli.d.ts.map +1 -0
- package/dist/runtime/engineBrokerServiceCli.js +32 -0
- package/dist/runtime/engineBrokerServiceConfig.d.ts +55 -0
- package/dist/runtime/engineBrokerServiceConfig.d.ts.map +1 -0
- package/dist/runtime/engineBrokerServiceConfig.js +130 -0
- package/dist/runtime/engineBrokerSingleflight.d.ts +13 -0
- package/dist/runtime/engineBrokerSingleflight.d.ts.map +1 -0
- package/dist/runtime/engineBrokerSingleflight.js +24 -0
- package/dist/runtime/engineBrokerTurnAccounting.d.ts +76 -0
- package/dist/runtime/engineBrokerTurnAccounting.d.ts.map +1 -0
- package/dist/runtime/engineBrokerTurnAccounting.js +108 -0
- package/dist/runtime/engineBrokerTurnRegistry.d.ts +57 -0
- package/dist/runtime/engineBrokerTurnRegistry.d.ts.map +1 -0
- package/dist/runtime/engineBrokerTurnRegistry.js +159 -0
- package/dist/runtime/engineDispatcher.d.ts +38 -0
- package/dist/runtime/engineDispatcher.d.ts.map +1 -0
- package/dist/runtime/engineDispatcher.js +228 -0
- package/dist/runtime/engineReadiness.d.ts +23 -0
- package/dist/runtime/engineReadiness.d.ts.map +1 -0
- package/dist/runtime/engineReadiness.js +222 -0
- package/dist/runtime/grokAuthenticationError.d.ts +8 -0
- package/dist/runtime/grokAuthenticationError.d.ts.map +1 -0
- package/dist/runtime/grokAuthenticationError.js +20 -0
- package/dist/runtime/grokBrokerCredentialAuthority.d.ts +23 -0
- package/dist/runtime/grokBrokerCredentialAuthority.d.ts.map +1 -0
- package/dist/runtime/grokBrokerCredentialAuthority.js +150 -0
- package/dist/runtime/grokBrokerCredentialReader.d.ts +6 -0
- package/dist/runtime/grokBrokerCredentialReader.d.ts.map +1 -0
- package/dist/runtime/grokBrokerCredentialReader.js +38 -0
- package/dist/runtime/grokBrokerModelPolicy.d.ts +23 -0
- package/dist/runtime/grokBrokerModelPolicy.d.ts.map +1 -0
- package/dist/runtime/grokBrokerModelPolicy.js +28 -0
- package/dist/runtime/grokBrokerProjection.d.ts +114 -0
- package/dist/runtime/grokBrokerProjection.d.ts.map +1 -0
- package/dist/runtime/grokBrokerProjection.js +101 -0
- package/dist/runtime/grokBrokerProviderClock.d.ts +26 -0
- package/dist/runtime/grokBrokerProviderClock.d.ts.map +1 -0
- package/dist/runtime/grokBrokerProviderClock.js +133 -0
- package/dist/runtime/grokBrokerProxy.d.ts +69 -0
- package/dist/runtime/grokBrokerProxy.d.ts.map +1 -0
- package/dist/runtime/grokBrokerProxy.js +326 -0
- package/dist/runtime/grokBrokerProxyJson.d.ts +10 -0
- package/dist/runtime/grokBrokerProxyJson.d.ts.map +1 -0
- package/dist/runtime/grokBrokerProxyJson.js +31 -0
- package/dist/runtime/grokBrokerProxyRequest.d.ts +30 -0
- package/dist/runtime/grokBrokerProxyRequest.d.ts.map +1 -0
- package/dist/runtime/grokBrokerProxyRequest.js +85 -0
- package/dist/runtime/grokBrokerRealmLease.d.ts +4 -0
- package/dist/runtime/grokBrokerRealmLease.d.ts.map +1 -0
- package/dist/runtime/grokBrokerRealmLease.js +33 -0
- package/dist/runtime/grokBrokerRefresh.d.ts +2 -0
- package/dist/runtime/grokBrokerRefresh.d.ts.map +1 -0
- package/dist/runtime/grokBrokerRefresh.js +15 -0
- package/dist/runtime/grokBrokerRunBudget.d.ts +20 -0
- package/dist/runtime/grokBrokerRunBudget.d.ts.map +1 -0
- package/dist/runtime/grokBrokerRunBudget.js +85 -0
- package/dist/runtime/grokBrokerSlot.d.ts +6 -0
- package/dist/runtime/grokBrokerSlot.d.ts.map +1 -0
- package/dist/runtime/grokBrokerSlot.js +21 -0
- package/dist/runtime/grokBrokerTaskClock.d.ts +32 -0
- package/dist/runtime/grokBrokerTaskClock.d.ts.map +1 -0
- package/dist/runtime/grokBrokerTaskClock.js +120 -0
- package/dist/runtime/grokBrokerTurnMeter.d.ts +180 -0
- package/dist/runtime/grokBrokerTurnMeter.d.ts.map +1 -0
- package/dist/runtime/grokBrokerTurnMeter.js +337 -0
- package/dist/runtime/grokBrokerWorkerConfig.d.ts +89 -0
- package/dist/runtime/grokBrokerWorkerConfig.d.ts.map +1 -0
- package/dist/runtime/grokBrokerWorkerConfig.js +154 -0
- package/dist/runtime/grokEngineBroker.d.ts +88 -0
- package/dist/runtime/grokEngineBroker.d.ts.map +1 -0
- package/dist/runtime/grokEngineBroker.js +202 -0
- package/dist/runtime/grokEngineBrokerLedger.d.ts +52 -0
- package/dist/runtime/grokEngineBrokerLedger.d.ts.map +1 -0
- package/dist/runtime/grokEngineBrokerLedger.js +114 -0
- package/dist/runtime/grokEngineBrokerMetering.d.ts +51 -0
- package/dist/runtime/grokEngineBrokerMetering.d.ts.map +1 -0
- package/dist/runtime/grokEngineBrokerMetering.js +34 -0
- package/dist/runtime/grokEngineBrokerTurn.d.ts +82 -0
- package/dist/runtime/grokEngineBrokerTurn.d.ts.map +1 -0
- package/dist/runtime/grokEngineBrokerTurn.js +348 -0
- package/dist/runtime/grokEngineBrokerTurnEnd.d.ts +88 -0
- package/dist/runtime/grokEngineBrokerTurnEnd.d.ts.map +1 -0
- package/dist/runtime/grokEngineBrokerTurnEnd.js +148 -0
- package/dist/runtime/grokInferenceClientConfig.d.ts +41 -0
- package/dist/runtime/grokInferenceClientConfig.d.ts.map +1 -0
- package/dist/runtime/grokInferenceClientConfig.js +62 -0
- package/dist/runtime/grokInferenceGrants.d.ts +77 -0
- package/dist/runtime/grokInferenceGrants.d.ts.map +1 -0
- package/dist/runtime/grokInferenceGrants.js +116 -0
- package/dist/runtime/grokInferenceProxy.d.ts +29 -0
- package/dist/runtime/grokInferenceProxy.d.ts.map +1 -0
- package/dist/runtime/grokInferenceProxy.js +85 -0
- package/dist/runtime/grokInferenceProxyRequest.d.ts +23 -0
- package/dist/runtime/grokInferenceProxyRequest.d.ts.map +1 -0
- package/dist/runtime/grokInferenceProxyRequest.js +63 -0
- package/dist/runtime/grokSlotPreflightReceipt.d.ts +70 -0
- package/dist/runtime/grokSlotPreflightReceipt.d.ts.map +1 -0
- package/dist/runtime/grokSlotPreflightReceipt.js +101 -0
- package/dist/runtime/grokSubscriptionRealm.d.ts +4 -0
- package/dist/runtime/grokSubscriptionRealm.d.ts.map +1 -0
- package/dist/runtime/grokSubscriptionRealm.js +435 -0
- package/dist/runtime/grokSubscriptionRealmTypes.d.ts +26 -0
- package/dist/runtime/grokSubscriptionRealmTypes.d.ts.map +1 -0
- package/dist/runtime/grokSubscriptionRealmTypes.js +1 -0
- package/dist/runtime/grokWorkerAttestation.d.ts +175 -0
- package/dist/runtime/grokWorkerAttestation.d.ts.map +1 -0
- package/dist/runtime/grokWorkerAttestation.js +266 -0
- package/dist/runtime/grokWorkerDenyPlacement.d.ts +80 -0
- package/dist/runtime/grokWorkerDenyPlacement.d.ts.map +1 -0
- package/dist/runtime/grokWorkerDenyPlacement.js +128 -0
- package/dist/runtime/grokWorkerHomeAttestation.d.ts +32 -0
- package/dist/runtime/grokWorkerHomeAttestation.d.ts.map +1 -0
- package/dist/runtime/grokWorkerHomeAttestation.js +75 -0
- package/dist/runtime/grokWorkerSandboxProfile.d.ts +27 -0
- package/dist/runtime/grokWorkerSandboxProfile.d.ts.map +1 -0
- package/dist/runtime/grokWorkerSandboxProfile.js +44 -0
- package/dist/runtime/grokWorkerTmpAttestation.d.ts +55 -0
- package/dist/runtime/grokWorkerTmpAttestation.d.ts.map +1 -0
- package/dist/runtime/grokWorkerTmpAttestation.js +63 -0
- package/dist/runtime/index.d.ts +31 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +27 -0
- package/dist/runtime/inferenceUsageLedger.d.ts +38 -0
- package/dist/runtime/inferenceUsageLedger.d.ts.map +1 -0
- package/dist/runtime/inferenceUsageLedger.js +53 -0
- package/dist/runtime/mcpToolResult.d.ts +127 -0
- package/dist/runtime/mcpToolResult.d.ts.map +1 -0
- package/dist/runtime/mcpToolResult.js +214 -0
- package/dist/runtime/moltnetMachineRead.d.ts +97 -0
- package/dist/runtime/moltnetMachineRead.d.ts.map +1 -0
- package/dist/runtime/moltnetMachineRead.js +183 -0
- package/dist/runtime/native/daimon-engine-broker +0 -0
- package/dist/runtime/organizationRuntime.d.ts +168 -0
- package/dist/runtime/organizationRuntime.d.ts.map +1 -0
- package/dist/runtime/organizationRuntime.js +3 -0
- package/dist/runtime/organizationRuntimeAdmission.d.ts +6 -0
- package/dist/runtime/organizationRuntimeAdmission.d.ts.map +1 -0
- package/dist/runtime/organizationRuntimeAdmission.js +22 -0
- package/dist/runtime/organizationRuntimeControl.d.ts +51 -0
- package/dist/runtime/organizationRuntimeControl.d.ts.map +1 -0
- package/dist/runtime/organizationRuntimeControl.js +283 -0
- package/dist/runtime/organizationRuntimeHost.d.ts +19 -0
- package/dist/runtime/organizationRuntimeHost.d.ts.map +1 -0
- package/dist/runtime/organizationRuntimeHost.js +368 -0
- package/dist/runtime/organizationRuntimeParsing.d.ts +6 -0
- package/dist/runtime/organizationRuntimeParsing.d.ts.map +1 -0
- package/dist/runtime/organizationRuntimeParsing.js +373 -0
- package/dist/runtime/organizationRuntimeReadiness.d.ts +12 -0
- package/dist/runtime/organizationRuntimeReadiness.d.ts.map +1 -0
- package/dist/runtime/organizationRuntimeReadiness.js +67 -0
- package/dist/runtime/organizationRuntimeRecording.d.ts +7 -0
- package/dist/runtime/organizationRuntimeRecording.d.ts.map +1 -0
- package/dist/runtime/organizationRuntimeRecording.js +58 -0
- package/dist/runtime/physicalReadiness.d.ts +59 -0
- package/dist/runtime/physicalReadiness.d.ts.map +1 -0
- package/dist/runtime/physicalReadiness.js +176 -0
- package/dist/runtime/portableCredentialAuth.d.ts +6 -0
- package/dist/runtime/portableCredentialAuth.d.ts.map +1 -0
- package/dist/runtime/portableCredentialAuth.js +70 -0
- package/dist/runtime/portableCredentialMaterial.d.ts +8 -0
- package/dist/runtime/portableCredentialMaterial.d.ts.map +1 -0
- package/dist/runtime/portableCredentialMaterial.js +169 -0
- package/dist/runtime/productionAgentTools.d.ts +5 -0
- package/dist/runtime/productionAgentTools.d.ts.map +1 -0
- package/dist/runtime/productionAgentTools.js +336 -0
- package/dist/runtime/relocateRuntimeConfig.d.ts +14 -0
- package/dist/runtime/relocateRuntimeConfig.d.ts.map +1 -0
- package/dist/runtime/relocateRuntimeConfig.js +38 -0
- package/dist/runtime/runtimeHomeLayout.d.ts +48 -0
- package/dist/runtime/runtimeHomeLayout.d.ts.map +1 -0
- package/dist/runtime/runtimeHomeLayout.js +84 -0
- package/dist/runtime/schedule.d.ts +40 -0
- package/dist/runtime/schedule.d.ts.map +1 -0
- package/dist/runtime/schedule.js +376 -0
- package/dist/runtime/storeCoordination.d.ts +33 -0
- package/dist/runtime/storeCoordination.d.ts.map +1 -0
- package/dist/runtime/storeCoordination.js +117 -0
- package/dist/runtime/taskClock.d.ts +42 -0
- package/dist/runtime/taskClock.d.ts.map +1 -0
- package/dist/runtime/taskClock.js +102 -0
- package/dist/runtime/taskClockProcess.d.ts +17 -0
- package/dist/runtime/taskClockProcess.d.ts.map +1 -0
- package/dist/runtime/taskClockProcess.js +58 -0
- package/dist/runtime/toolResultSpill.d.ts +152 -0
- package/dist/runtime/toolResultSpill.d.ts.map +1 -0
- package/dist/runtime/toolResultSpill.js +351 -0
- package/dist/runtime/turnRequestLedger.d.ts +155 -0
- package/dist/runtime/turnRequestLedger.d.ts.map +1 -0
- package/dist/runtime/turnRequestLedger.js +251 -0
- package/dist/runtime/turnUsageLedger.d.ts +143 -0
- package/dist/runtime/turnUsageLedger.d.ts.map +1 -0
- package/dist/runtime/turnUsageLedger.js +203 -0
- package/dist/runtime/wakeAcceptanceClaimDiagnostics.d.ts +34 -0
- package/dist/runtime/wakeAcceptanceClaimDiagnostics.d.ts.map +1 -0
- package/dist/runtime/wakeAcceptanceClaimDiagnostics.js +79 -0
- package/dist/runtime/wakeAcceptanceIndex.d.ts +55 -0
- package/dist/runtime/wakeAcceptanceIndex.d.ts.map +1 -0
- package/dist/runtime/wakeAcceptanceIndex.js +158 -0
- package/dist/runtime/wakeAcceptanceProcessIdentity.d.ts +25 -0
- package/dist/runtime/wakeAcceptanceProcessIdentity.d.ts.map +1 -0
- package/dist/runtime/wakeAcceptanceProcessIdentity.js +54 -0
- package/dist/runtime/wakeAcceptanceReconciliation.d.ts +211 -0
- package/dist/runtime/wakeAcceptanceReconciliation.d.ts.map +1 -0
- package/dist/runtime/wakeAcceptanceReconciliation.js +289 -0
- package/dist/runtime/wakeAcceptanceRecord.d.ts +25 -0
- package/dist/runtime/wakeAcceptanceRecord.d.ts.map +1 -0
- package/dist/runtime/wakeAcceptanceRecord.js +58 -0
- package/dist/runtime/wakeAcceptanceRetention.d.ts +36 -0
- package/dist/runtime/wakeAcceptanceRetention.d.ts.map +1 -0
- package/dist/runtime/wakeAcceptanceRetention.js +38 -0
- package/dist/runtime/wakeAcceptanceStore.d.ts +113 -0
- package/dist/runtime/wakeAcceptanceStore.d.ts.map +1 -0
- package/dist/runtime/wakeAcceptanceStore.js +561 -0
- package/dist/runtime/wakeAcceptanceTypes.d.ts +179 -0
- package/dist/runtime/wakeAcceptanceTypes.d.ts.map +1 -0
- package/dist/runtime/wakeAcceptanceTypes.js +95 -0
- package/dist/runtime/wakeFuse.d.ts +124 -0
- package/dist/runtime/wakeFuse.d.ts.map +1 -0
- package/dist/runtime/wakeFuse.js +466 -0
- package/dist/runtime/wakeMomentFs.d.ts +27 -0
- package/dist/runtime/wakeMomentFs.d.ts.map +1 -0
- package/dist/runtime/wakeMomentFs.js +223 -0
- package/dist/runtime/wakeMomentHistory.d.ts +26 -0
- package/dist/runtime/wakeMomentHistory.d.ts.map +1 -0
- package/dist/runtime/wakeMomentHistory.js +109 -0
- package/dist/runtime/wakeMomentIo.d.ts +22 -0
- package/dist/runtime/wakeMomentIo.d.ts.map +1 -0
- package/dist/runtime/wakeMomentIo.js +114 -0
- package/dist/runtime/wakeMomentRecorder.d.ts +33 -0
- package/dist/runtime/wakeMomentRecorder.d.ts.map +1 -0
- package/dist/runtime/wakeMomentRecorder.js +81 -0
- package/dist/runtime/wakeMomentRetention.d.ts +7 -0
- package/dist/runtime/wakeMomentRetention.d.ts.map +1 -0
- package/dist/runtime/wakeMomentRetention.js +143 -0
- package/dist/runtime/wakeMomentRows.d.ts +8 -0
- package/dist/runtime/wakeMomentRows.d.ts.map +1 -0
- package/dist/runtime/wakeMomentRows.js +66 -0
- package/dist/runtime/wakeMomentSnapshot.d.ts +56 -0
- package/dist/runtime/wakeMomentSnapshot.d.ts.map +1 -0
- package/dist/runtime/wakeMomentSnapshot.js +248 -0
- package/package.json +22 -11
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare class GrokBrokerRunLimit extends Error {
|
|
2
|
+
constructor();
|
|
3
|
+
}
|
|
4
|
+
/** One broker realm lease owns this journal. Reserve durably BEFORE forwarding;
|
|
5
|
+
* failed calls and credential retries consume capacity, never refund it.
|
|
6
|
+
* Slot recycle must never remove this run-level file.
|
|
7
|
+
*/
|
|
8
|
+
export declare class GrokBrokerRunBudget {
|
|
9
|
+
readonly maximum: number;
|
|
10
|
+
private readonly file;
|
|
11
|
+
private used;
|
|
12
|
+
private tail;
|
|
13
|
+
private failed;
|
|
14
|
+
private closed;
|
|
15
|
+
private constructor();
|
|
16
|
+
static open(maximum: number, file: string): Promise<GrokBrokerRunBudget>;
|
|
17
|
+
reserve(): Promise<void>;
|
|
18
|
+
close(): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=grokBrokerRunBudget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grokBrokerRunBudget.d.ts","sourceRoot":"","sources":["../../src/runtime/grokBrokerRunBudget.ts"],"names":[],"mappings":"AAIA,qBAAa,kBAAmB,SAAQ,KAAK;;CAE5C;AAED;;;GAGG;AACH,qBAAa,mBAAmB;IAIV,QAAQ,CAAC,OAAO,EAAE,MAAM;IAAE,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAU,OAAO,CAAC,IAAI;IAHzF,OAAO,CAAC,IAAI,CAAoC;IAChD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO;WAEM,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAc9E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAyBlB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAI7B"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { mkdir, open, readFile, rename, rm } from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
export class GrokBrokerRunLimit extends Error {
|
|
5
|
+
constructor() { super("run_request_limit"); }
|
|
6
|
+
}
|
|
7
|
+
/** One broker realm lease owns this journal. Reserve durably BEFORE forwarding;
|
|
8
|
+
* failed calls and credential retries consume capacity, never refund it.
|
|
9
|
+
* Slot recycle must never remove this run-level file.
|
|
10
|
+
*/
|
|
11
|
+
export class GrokBrokerRunBudget {
|
|
12
|
+
maximum;
|
|
13
|
+
file;
|
|
14
|
+
used;
|
|
15
|
+
tail = Promise.resolve();
|
|
16
|
+
failed = false;
|
|
17
|
+
closed = false;
|
|
18
|
+
constructor(maximum, file, used) {
|
|
19
|
+
this.maximum = maximum;
|
|
20
|
+
this.file = file;
|
|
21
|
+
this.used = used;
|
|
22
|
+
}
|
|
23
|
+
static async open(maximum, file) {
|
|
24
|
+
if (!Number.isSafeInteger(maximum) || maximum < 1)
|
|
25
|
+
throw new TypeError("invalid run request cap");
|
|
26
|
+
await mkdir(path.dirname(file), { recursive: true, mode: 0o700 });
|
|
27
|
+
let used = 0;
|
|
28
|
+
try {
|
|
29
|
+
const state = JSON.parse(await readFile(file, "utf8"));
|
|
30
|
+
if (state.schema !== "daimon.run-requests.v1" || state.maximum !== maximum ||
|
|
31
|
+
!Number.isSafeInteger(state.used) || state.used < 0 || state.used > maximum ||
|
|
32
|
+
Object.keys(state).length !== 3)
|
|
33
|
+
throw new Error("invalid run request checkpoint");
|
|
34
|
+
used = state.used;
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
if (error.code !== "ENOENT")
|
|
38
|
+
throw error;
|
|
39
|
+
}
|
|
40
|
+
return new GrokBrokerRunBudget(maximum, file, used);
|
|
41
|
+
}
|
|
42
|
+
reserve() {
|
|
43
|
+
if (this.closed)
|
|
44
|
+
return Promise.reject(new Error("run request budget closed"));
|
|
45
|
+
const reservation = this.tail.then(async () => {
|
|
46
|
+
if (this.failed)
|
|
47
|
+
throw new Error("run request checkpoint unavailable");
|
|
48
|
+
if (this.used >= this.maximum)
|
|
49
|
+
throw new GrokBrokerRunLimit();
|
|
50
|
+
this.used += 1;
|
|
51
|
+
const temporary = `${this.file}.${randomUUID()}.tmp`;
|
|
52
|
+
try {
|
|
53
|
+
const handle = await open(temporary, "wx", 0o600);
|
|
54
|
+
try {
|
|
55
|
+
await handle.writeFile(JSON.stringify({ schema: "daimon.run-requests.v1", maximum: this.maximum, used: this.used }));
|
|
56
|
+
await handle.sync();
|
|
57
|
+
}
|
|
58
|
+
finally {
|
|
59
|
+
await handle.close();
|
|
60
|
+
}
|
|
61
|
+
await rename(temporary, this.file);
|
|
62
|
+
const directory = await open(path.dirname(this.file), "r");
|
|
63
|
+
try {
|
|
64
|
+
await directory.sync();
|
|
65
|
+
}
|
|
66
|
+
finally {
|
|
67
|
+
await directory.close();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
this.failed = true;
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
await rm(temporary, { force: true });
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
this.tail = reservation.catch(() => undefined);
|
|
79
|
+
return reservation;
|
|
80
|
+
}
|
|
81
|
+
async close() {
|
|
82
|
+
this.closed = true;
|
|
83
|
+
await this.tail;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type GrokWorkerConfigVariant } from "../contracts/grokBrokerTaskClock.js";
|
|
2
|
+
/** Canonical path in both broker and worker views; never a caller-selected file. */
|
|
3
|
+
export declare function brokerTaskClockFileFor(slot: number): string;
|
|
4
|
+
/** The pinned strict base exposes /run; its deny mounts must hide every peer clock. */
|
|
5
|
+
export declare function assertBrokerTaskClockIsolation(variant: GrokWorkerConfigVariant, slot: number, slots: readonly number[], denyPaths: readonly string[]): void;
|
|
6
|
+
//# sourceMappingURL=grokBrokerSlot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grokBrokerSlot.d.ts","sourceRoot":"","sources":["../../src/runtime/grokBrokerSlot.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAE3G,oFAAoF;AACpF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG3D;AAED,uFAAuF;AACvF,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,uBAAuB,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,SAAS,EAAE,SAAS,MAAM,EAAE,GACrG,IAAI,CAUN"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { GROK_BROKER_TASK_CLOCK } from "../contracts/grokBrokerTaskClock.js";
|
|
2
|
+
/** Canonical path in both broker and worker views; never a caller-selected file. */
|
|
3
|
+
export function brokerTaskClockFileFor(slot) {
|
|
4
|
+
if (!Number.isSafeInteger(slot) || slot < 0)
|
|
5
|
+
throw new TypeError("invalid broker slot");
|
|
6
|
+
return `${GROK_BROKER_TASK_CLOCK.rootDirectoryPath}/slot-${slot}/faketime`;
|
|
7
|
+
}
|
|
8
|
+
/** The pinned strict base exposes /run; its deny mounts must hide every peer clock. */
|
|
9
|
+
export function assertBrokerTaskClockIsolation(variant, slot, slots, denyPaths) {
|
|
10
|
+
if (variant !== "clocked")
|
|
11
|
+
return;
|
|
12
|
+
const own = brokerTaskClockFileFor(slot);
|
|
13
|
+
const covers = (denied, file) => file === denied || file.startsWith(`${denied}/`);
|
|
14
|
+
if (denyPaths.some((denied) => covers(denied, own)))
|
|
15
|
+
throw new Error("own broker task clock is denied");
|
|
16
|
+
for (const peer of slots) {
|
|
17
|
+
if (peer !== slot && !denyPaths.some((denied) => covers(denied, brokerTaskClockFileFor(peer).slice(0, -"/faketime".length)))) {
|
|
18
|
+
throw new Error("sibling broker task clock is not denied");
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type Stats } from "node:fs";
|
|
2
|
+
import { type GrokWorkerConfigVariant } from "../contracts/grokBrokerTaskClock.js";
|
|
3
|
+
import type { GrokBrokerProviderClockObservation } from "./grokBrokerProviderClock.js";
|
|
4
|
+
import { type GrokWorkerConfigPins } from "./grokWorkerHomeAttestation.js";
|
|
5
|
+
/** Internal filesystem seam; tests wrap real handles to observe both fsyncs. */
|
|
6
|
+
export type BrokerTaskClockFs = Pick<typeof import("node:fs/promises"), "lstat" | "open" | "rename" | "unlink">;
|
|
7
|
+
export type BrokerShellClock = "task" | "real" | "gap";
|
|
8
|
+
export type BrokerShellClockObservation = Readonly<{
|
|
9
|
+
shellClock?: BrokerShellClock;
|
|
10
|
+
}>;
|
|
11
|
+
export type BrokerClockObservation = BrokerShellClockObservation & Readonly<{
|
|
12
|
+
providerClock?: GrokBrokerProviderClockObservation;
|
|
13
|
+
}>;
|
|
14
|
+
export declare function brokerClockObservation(shellClock?: BrokerShellClock, providerClock?: GrokBrokerProviderClockObservation): BrokerClockObservation;
|
|
15
|
+
/** Relative seconds only: never a date, speed, loader path or arbitrary environment. */
|
|
16
|
+
export declare function parseBrokerProcessClock(value: unknown): string;
|
|
17
|
+
/** Daimon remains the offset owner; the broker uses its pinned library, not ambient preload. */
|
|
18
|
+
export declare function brokerProcessClock(): string | undefined;
|
|
19
|
+
/** Discovery only; selected slots still require full attestation before reconciliation. */
|
|
20
|
+
export declare function needsBrokerTaskClockReconciliation(profilePath: string, pins: GrokWorkerConfigPins, file?: string): Promise<boolean>;
|
|
21
|
+
/** Pure provisioning seam: only the broker can replace entries; every worker can read. */
|
|
22
|
+
export declare function assertBrokerTaskClockDirectory(entry: Pick<Stats, "uid" | "mode" | "isDirectory">, brokerUid?: number): void;
|
|
23
|
+
/**
|
|
24
|
+
* Root provisions a non-symlink broker-owned directory. Rename publishes a
|
|
25
|
+
* complete value before launch; binding the DIRECTORY (not the old file inode)
|
|
26
|
+
* into the worker view keeps subsequent turns visible. No native ABI changes.
|
|
27
|
+
* Paths/uid below are internal test seams, never control or service inputs.
|
|
28
|
+
*/
|
|
29
|
+
export declare function writeBrokerTaskClock(value: string | undefined, file?: string, brokerUid?: number, fs?: BrokerTaskClockFs): Promise<void>;
|
|
30
|
+
/** Unknown config is never called clocked: this runs only after byte attestation. */
|
|
31
|
+
export declare function prepareBrokerTaskClock(variant: GrokWorkerConfigVariant, value: string | undefined, write?: typeof writeBrokerTaskClock): Promise<BrokerShellClock>;
|
|
32
|
+
//# sourceMappingURL=grokBrokerTaskClock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grokBrokerTaskClock.d.ts","sourceRoot":"","sources":["../../src/runtime/grokBrokerTaskClock.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,KAAK,KAAK,EAAE,MAAM,SAAS,CAAC;AAIhD,OAAO,EAA0B,KAAK,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAE3G,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,8BAA8B,CAAC;AACvF,OAAO,EAA+B,KAAK,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAExG,gFAAgF;AAChF,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,cAAc,kBAAkB,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC;AAGhH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AACvD,MAAM,MAAM,2BAA2B,GAAG,QAAQ,CAAC;IAAE,UAAU,CAAC,EAAE,gBAAgB,CAAA;CAAE,CAAC,CAAC;AACtF,MAAM,MAAM,sBAAsB,GAAG,2BAA2B,GAAG,QAAQ,CAAC;IAC1E,aAAa,CAAC,EAAE,kCAAkC,CAAC;CACpD,CAAC,CAAC;AAEH,wBAAgB,sBAAsB,CACpC,UAAU,CAAC,EAAE,gBAAgB,EAAE,aAAa,CAAC,EAAE,kCAAkC,GAChF,sBAAsB,CAKxB;AAED,wFAAwF;AACxF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAG9D;AAED,gGAAgG;AAChG,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,SAAS,CAIvD;AAED,2FAA2F;AAC3F,wBAAsB,kCAAkC,CACtD,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAC/C,IAAI,GAAE,MAAkC,GACvC,OAAO,CAAC,OAAO,CAAC,CAmBlB;AAED,0FAA0F;AAC1F,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,aAAa,CAAC,EAAE,SAAS,GAAE,MAAwC,GAAG,IAAI,CAI5J;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,IAAI,GAAE,MAAkC,EACxC,SAAS,GAAE,MAAwC,EACnD,EAAE,GAAE,iBAA2B,GAC9B,OAAO,CAAC,IAAI,CAAC,CAoCf;AAED,qFAAqF;AACrF,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,uBAAuB,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,GAAE,OAAO,oBAA2C,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAS9L"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { brokerTaskClockFileFor } from "./grokBrokerSlot.js";
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
import { constants } from "node:fs";
|
|
4
|
+
import { lstat, open, rename, unlink } from "node:fs/promises";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
import { GROK_BROKER_TASK_CLOCK } from "../contracts/grokBrokerTaskClock.js";
|
|
7
|
+
import { readTaskClock, taskClockChildEnvironment } from "./taskClock.js";
|
|
8
|
+
import { assertGrokWorkerConfigBytes } from "./grokWorkerHomeAttestation.js";
|
|
9
|
+
const clockFs = { lstat, open, rename, unlink };
|
|
10
|
+
export function brokerClockObservation(shellClock, providerClock) {
|
|
11
|
+
return {
|
|
12
|
+
...(shellClock === undefined ? {} : { shellClock }),
|
|
13
|
+
...(providerClock === undefined ? {} : { providerClock })
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
/** Relative seconds only: never a date, speed, loader path or arbitrary environment. */
|
|
17
|
+
export function parseBrokerProcessClock(value) {
|
|
18
|
+
if (typeof value !== "string" || !/^[+-](?:0|[1-9][0-9]{0,12})(?:\.[0-9]{3})?$/u.test(value))
|
|
19
|
+
throw new TypeError("invalid broker process clock");
|
|
20
|
+
return value;
|
|
21
|
+
}
|
|
22
|
+
/** Daimon remains the offset owner; the broker uses its pinned library, not ambient preload. */
|
|
23
|
+
export function brokerProcessClock() {
|
|
24
|
+
const clock = readTaskClock();
|
|
25
|
+
clock?.now();
|
|
26
|
+
return taskClockChildEnvironment({}, clock, { LD_PRELOAD: GROK_BROKER_TASK_CLOCK.preloadPath }).FAKETIME;
|
|
27
|
+
}
|
|
28
|
+
/** Discovery only; selected slots still require full attestation before reconciliation. */
|
|
29
|
+
export async function needsBrokerTaskClockReconciliation(profilePath, pins, file = brokerTaskClockFileFor(0)) {
|
|
30
|
+
try {
|
|
31
|
+
// Even an unsafe directory entry must reach the fail-closed reconciliation.
|
|
32
|
+
await lstat(path.dirname(file));
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
if (error.code !== "ENOENT")
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
let handle;
|
|
40
|
+
try {
|
|
41
|
+
handle = await open(path.join(path.dirname(profilePath), "config.toml"), constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);
|
|
42
|
+
const entry = await handle.stat();
|
|
43
|
+
if (!entry.isFile() || entry.size > 65_536)
|
|
44
|
+
return false;
|
|
45
|
+
return assertGrokWorkerConfigBytes(await handle.readFile(), pins) === "clocked";
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// Missing or invalid unclocked provisioning is a per-turn attestation failure.
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
finally {
|
|
52
|
+
await handle?.close();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/** Pure provisioning seam: only the broker can replace entries; every worker can read. */
|
|
56
|
+
export function assertBrokerTaskClockDirectory(entry, brokerUid = GROK_BROKER_TASK_CLOCK.ownerUid) {
|
|
57
|
+
if (!entry.isDirectory() || entry.uid !== brokerUid || (entry.mode & 0o7777) !== GROK_BROKER_TASK_CLOCK.directoryMode) {
|
|
58
|
+
throw new Error("unsafe Grok broker task clock directory");
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Root provisions a non-symlink broker-owned directory. Rename publishes a
|
|
63
|
+
* complete value before launch; binding the DIRECTORY (not the old file inode)
|
|
64
|
+
* into the worker view keeps subsequent turns visible. No native ABI changes.
|
|
65
|
+
* Paths/uid below are internal test seams, never control or service inputs.
|
|
66
|
+
*/
|
|
67
|
+
export async function writeBrokerTaskClock(value, file = brokerTaskClockFileFor(0), brokerUid = GROK_BROKER_TASK_CLOCK.ownerUid, fs = clockFs) {
|
|
68
|
+
const seconds = value === undefined ? "+0" : parseBrokerProcessClock(value);
|
|
69
|
+
const directory = path.dirname(file);
|
|
70
|
+
const before = await fs.lstat(directory);
|
|
71
|
+
assertBrokerTaskClockDirectory(before, brokerUid);
|
|
72
|
+
const parent = await fs.open(directory, constants.O_RDONLY | constants.O_DIRECTORY | constants.O_NOFOLLOW);
|
|
73
|
+
const temporary = path.join(directory, `.faketime-${randomUUID()}.tmp`);
|
|
74
|
+
let created = false;
|
|
75
|
+
try {
|
|
76
|
+
const pinned = await parent.stat();
|
|
77
|
+
const verify = async () => {
|
|
78
|
+
const current = await fs.lstat(directory);
|
|
79
|
+
assertBrokerTaskClockDirectory(current, brokerUid);
|
|
80
|
+
if (current.dev !== pinned.dev || current.ino !== pinned.ino || before.dev !== pinned.dev || before.ino !== pinned.ino)
|
|
81
|
+
throw new Error("Grok broker task clock directory changed");
|
|
82
|
+
};
|
|
83
|
+
await verify();
|
|
84
|
+
const handle = await fs.open(temporary, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | constants.O_NOFOLLOW, GROK_BROKER_TASK_CLOCK.fileMode);
|
|
85
|
+
created = true;
|
|
86
|
+
try {
|
|
87
|
+
const entry = await handle.stat();
|
|
88
|
+
if (entry.uid !== brokerUid || !entry.isFile() || entry.nlink !== 1)
|
|
89
|
+
throw new Error("unsafe Grok broker task clock file");
|
|
90
|
+
await handle.chmod(GROK_BROKER_TASK_CLOCK.fileMode); // restrictive broker umask must not hide the file from the worker
|
|
91
|
+
await handle.writeFile(`${seconds}\n`, "utf8");
|
|
92
|
+
await handle.sync();
|
|
93
|
+
}
|
|
94
|
+
finally {
|
|
95
|
+
await handle.close();
|
|
96
|
+
}
|
|
97
|
+
await verify();
|
|
98
|
+
await fs.rename(temporary, file);
|
|
99
|
+
created = false;
|
|
100
|
+
await parent.sync();
|
|
101
|
+
}
|
|
102
|
+
finally {
|
|
103
|
+
if (created)
|
|
104
|
+
await fs.unlink(temporary).catch(() => undefined);
|
|
105
|
+
await parent.close();
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/** Unknown config is never called clocked: this runs only after byte attestation. */
|
|
109
|
+
export async function prepareBrokerTaskClock(variant, value, write = writeBrokerTaskClock) {
|
|
110
|
+
if (value !== undefined)
|
|
111
|
+
parseBrokerProcessClock(value);
|
|
112
|
+
if (variant === "clocked") {
|
|
113
|
+
await write(value);
|
|
114
|
+
return value === undefined ? "real" : "task";
|
|
115
|
+
}
|
|
116
|
+
if (value === undefined)
|
|
117
|
+
return "real";
|
|
118
|
+
console.warn("daimon: task clock coverage gap engine=grok: attested broker worker config is unclocked; native tools remain on real time; wake allowed");
|
|
119
|
+
return "gap";
|
|
120
|
+
}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { type EngineBrokerLimitReason, type EngineBrokerTurnLimits, type EngineBrokerTurnUsage } from "./engineBrokerTurnAccounting.js";
|
|
2
|
+
/**
|
|
3
|
+
* `estimated` marks a request whose response carried no valid usage and was
|
|
4
|
+
* charged {@link estimateGrokRequestUsage}. `toolCalls` are the tool-call names
|
|
5
|
+
* that request's response carried, names only ({@link parseGrokResponseToolNames});
|
|
6
|
+
* absent means the response could not be decoded, `[]` that it called nothing.
|
|
7
|
+
*/
|
|
8
|
+
export type GrokBrokerRequestTiming = Readonly<{
|
|
9
|
+
startedAt: string;
|
|
10
|
+
endedAt?: string;
|
|
11
|
+
usage?: EngineBrokerTurnUsage;
|
|
12
|
+
estimated?: true;
|
|
13
|
+
toolCalls?: readonly string[];
|
|
14
|
+
}>;
|
|
15
|
+
export type GrokBrokerTurnMeterSnapshot = Readonly<{
|
|
16
|
+
requests: number;
|
|
17
|
+
tokens: number;
|
|
18
|
+
limitReason: EngineBrokerLimitReason;
|
|
19
|
+
usage: EngineBrokerTurnUsage | null;
|
|
20
|
+
estimatedRequests: number;
|
|
21
|
+
timings: readonly GrokBrokerRequestTiming[];
|
|
22
|
+
}>;
|
|
23
|
+
/** The model's last answer when it called no tool: the turn's final reply, as the proxy saw it, and when it settled. */
|
|
24
|
+
export type GrokBrokerFinalReply = Readonly<{
|
|
25
|
+
index: number;
|
|
26
|
+
text: string;
|
|
27
|
+
at: number;
|
|
28
|
+
}>;
|
|
29
|
+
/**
|
|
30
|
+
* The weight a cached prompt read carries against the token ceiling.
|
|
31
|
+
*
|
|
32
|
+
* The ceiling exists to bound spend, and a cached read is billed at a quarter
|
|
33
|
+
* of a fresh input token (xAI's published cached-input rate for the Grok 4
|
|
34
|
+
* family). Counting it at full weight made the ceiling a context-size limit
|
|
35
|
+
* instead: a writing or composing turn re-reads its whole conversation on
|
|
36
|
+
* every request, 85–90% of it from cache, and production turns died at a
|
|
37
|
+
* 1.1M "ceiling" having spent about a third of that. Fresh input, output and
|
|
38
|
+
* reasoning still count in full; the sealed usage and ledgers are unchanged
|
|
39
|
+
* and keep every cached token at its raw count.
|
|
40
|
+
*/
|
|
41
|
+
export declare const GROK_CACHED_INPUT_TOKEN_WEIGHT = 0.25;
|
|
42
|
+
/** What one request's usage costs against `maxTokens`: everything at full weight except cached reads. */
|
|
43
|
+
export declare const grokCeilingTokens: (usage: EngineBrokerTurnUsage) => number;
|
|
44
|
+
/**
|
|
45
|
+
* The proxy's per-turn spend gate.
|
|
46
|
+
*
|
|
47
|
+
* Every forwarded model request of one turn passes through {@link admit}
|
|
48
|
+
* *before* a bearer is attached, so the checks are hard for requests and
|
|
49
|
+
* elapsed time and between-requests for tokens:
|
|
50
|
+
*
|
|
51
|
+
* - `maxRequests`: request `maxRequests + 1` is refused; upstream never sees it.
|
|
52
|
+
* - `timeoutMs`: a request arriving after the deadline is refused (the broker's
|
|
53
|
+
* own timer additionally kills a worker that is mid-request).
|
|
54
|
+
* - `maxTokens`: checked against the running total of upstream-reported usage
|
|
55
|
+
* of the requests already answered. A request is admitted while that total is
|
|
56
|
+
* still below the ceiling, so the overshoot is bounded by exactly one
|
|
57
|
+
* request's usage — the last admitted one. Cached prompt reads count at
|
|
58
|
+
* {@link GROK_CACHED_INPUT_TOKEN_WEIGHT} ({@link grokCeilingTokens}); an
|
|
59
|
+
* uncached replay (P0 observed one at +55%) is fresh input and counts in full.
|
|
60
|
+
*
|
|
61
|
+
* The first limit that fires is sticky: every later request is refused with
|
|
62
|
+
* the same reason, and `onLimit` runs once.
|
|
63
|
+
*
|
|
64
|
+
* The token bound is only a bound if no request can be admitted on a total
|
|
65
|
+
* that an in-flight request has not yet reported into. So a turn has at most
|
|
66
|
+
* ONE upstream request in flight: a second request arriving before the first
|
|
67
|
+
* settled is refused (`busy`, HTTP 429) without being counted or tripping a
|
|
68
|
+
* limit. Grok's headless loop is sequential — every live capture (P1
|
|
69
|
+
* live-round1, P2 live) shows each request ending before the next starts — so
|
|
70
|
+
* this refuses only a worker that is not behaving like Grok. Tripping a limit
|
|
71
|
+
* (including the broker's timer) aborts that in-flight upstream call through
|
|
72
|
+
* its own `AbortSignal` rather than letting it run to completion.
|
|
73
|
+
*/
|
|
74
|
+
export declare class GrokBrokerTurnMeter {
|
|
75
|
+
readonly limits: EngineBrokerTurnLimits;
|
|
76
|
+
private readonly onLimit;
|
|
77
|
+
private readonly now;
|
|
78
|
+
private readonly startedAt;
|
|
79
|
+
private readonly timings;
|
|
80
|
+
private tokens;
|
|
81
|
+
private reason;
|
|
82
|
+
private inFlight;
|
|
83
|
+
private final;
|
|
84
|
+
private activityAt;
|
|
85
|
+
constructor(limits: EngineBrokerTurnLimits, onLimit?: (reason: Exclude<EngineBrokerLimitReason, "none">) => void, now?: () => number);
|
|
86
|
+
/** Returns the request index and its upstream abort signal when admitted, the limit that refused it, or `busy` while another request is in flight. */
|
|
87
|
+
admit(): Readonly<{
|
|
88
|
+
index: number;
|
|
89
|
+
signal: AbortSignal;
|
|
90
|
+
} | {
|
|
91
|
+
refused: Exclude<EngineBrokerLimitReason, "none">;
|
|
92
|
+
} | {
|
|
93
|
+
busy: true;
|
|
94
|
+
}>;
|
|
95
|
+
/**
|
|
96
|
+
* Records one admitted request's end, its usage, and the tool-call names its
|
|
97
|
+
* response carried. A response without valid usage (absent, malformed,
|
|
98
|
+
* implausible, or a failed/aborted call) is charged a conservative estimate
|
|
99
|
+
* from the request body size, so a missing `usage` can never silently disable
|
|
100
|
+
* the token ceiling. `toolCalls` is observation only: it never affects
|
|
101
|
+
* admission, the running total, or any limit.
|
|
102
|
+
*
|
|
103
|
+
* `finalReply` is the answer text of a response that called no tool and
|
|
104
|
+
* stopped ({@link parseGrokFinalReply}). It is recorded only when the same
|
|
105
|
+
* response decoded to zero tool calls, and only for the request still the
|
|
106
|
+
* latest: it is what lets the broker end a turn whose worker has finished but
|
|
107
|
+
* not exited, and report finished work whose stdout the launcher refused.
|
|
108
|
+
*/
|
|
109
|
+
settle(index: number, usage: EngineBrokerTurnUsage | undefined, requestBytes: number, toolCalls?: readonly string[], finalReply?: string): void;
|
|
110
|
+
/** The turn's final reply, while no later request has been admitted. */
|
|
111
|
+
finalReply(): GrokBrokerFinalReply | undefined;
|
|
112
|
+
/** Whether a model request is in flight right now. */
|
|
113
|
+
busy(): boolean;
|
|
114
|
+
/** When a model request last started or settled (the meter's construction before any). */
|
|
115
|
+
lastActivityAt(): number;
|
|
116
|
+
/** Trips a limit from outside the request path (the broker's wall-clock timer). */
|
|
117
|
+
trip(reason: Exclude<EngineBrokerLimitReason, "none">): void;
|
|
118
|
+
/** Aborts the in-flight upstream call, if any (limit trip, or the broker ending the turn). */
|
|
119
|
+
abortInFlight(): void;
|
|
120
|
+
snapshot(): GrokBrokerTurnMeterSnapshot;
|
|
121
|
+
}
|
|
122
|
+
/** The charge for a request without valid usage: `ceil(bodyBytes / 2)` input plus a fixed output allowance. */
|
|
123
|
+
export declare const estimateGrokRequestUsage: (requestBytes: number) => EngineBrokerTurnUsage;
|
|
124
|
+
/**
|
|
125
|
+
* Upstream-reported usage of one chat-completions response, or `undefined`.
|
|
126
|
+
*
|
|
127
|
+
* The proxy buffers the whole upstream body, so the last `usage` object of an
|
|
128
|
+
* SSE stream (`stream_options.include_usage`) or of a JSON body is available
|
|
129
|
+
* before the body is returned to the worker. OpenAI-shaped `prompt_tokens`
|
|
130
|
+
* include cached tokens; they are split into disjoint buckets here, and any
|
|
131
|
+
* reasoning tokens reported outside `completion_tokens` (visible as
|
|
132
|
+
* `total_tokens` above prompt + completion) are folded into `output` so the
|
|
133
|
+
* total invariant holds. A malformed block, or one whose total exceeds
|
|
134
|
+
* `GROK_ENGINE_BROKER.turnLimits.requestUsageMaxTokens`, is invalid: never
|
|
135
|
+
* zero-filled and never added — the meter charges an estimate instead.
|
|
136
|
+
*/
|
|
137
|
+
export declare function parseGrokUpstreamUsage(body: Uint8Array, contentType: string | undefined): EngineBrokerTurnUsage | undefined;
|
|
138
|
+
/** At most this many names per request row; a longer list ends in {@link GROK_TOOL_CALL_TRUNCATED}. */
|
|
139
|
+
export declare const GROK_REQUEST_TOOL_CALLS_MAX = 16;
|
|
140
|
+
/** A `name` that is not a plain short identifier is counted, never passed through. */
|
|
141
|
+
export declare const GROK_TOOL_CALL_INVALID = "<invalid>";
|
|
142
|
+
export declare const GROK_TOOL_CALL_TRUNCATED = "<truncated>";
|
|
143
|
+
/**
|
|
144
|
+
* The tool-call NAMES one upstream response carried, and nothing else.
|
|
145
|
+
*
|
|
146
|
+
* Two live turns could not answer "did the model ever try `use_tool` or
|
|
147
|
+
* `search_tool`", because the per-request rows recorded timings and tokens but
|
|
148
|
+
* never an attempt. This is that answer, under four rules:
|
|
149
|
+
*
|
|
150
|
+
* - names only. No arguments, no message content, no tokens, no header. A
|
|
151
|
+
* `name` that is not a plain short identifier is recorded as
|
|
152
|
+
* {@link GROK_TOOL_CALL_INVALID} rather than passing provider bytes through;
|
|
153
|
+
* - bounded. At most {@link GROK_REQUEST_TOOL_CALLS_MAX} entries, the last being
|
|
154
|
+
* {@link GROK_TOOL_CALL_TRUNCATED} when the response carried more, so a
|
|
155
|
+
* pathological response cannot write an unbounded row;
|
|
156
|
+
* - absence stays absence. A decoded response that called nothing returns `[]`;
|
|
157
|
+
* a response that could not be decoded returns `undefined` and the row records
|
|
158
|
+
* no field at all;
|
|
159
|
+
* - one streaming call names itself in one delta and streams its arguments in
|
|
160
|
+
* the rest, so a repeat of the same `(choice, call)` index is that same call,
|
|
161
|
+
* not a second attempt.
|
|
162
|
+
*/
|
|
163
|
+
export declare function parseGrokResponseToolNames(body: Uint8Array, contentType: string | undefined): readonly string[] | undefined;
|
|
164
|
+
/** The most of a final reply the broker reports; the rest is cut at a marker that says how much. */
|
|
165
|
+
export declare const GROK_FINAL_REPLY_MAX_BYTES: number;
|
|
166
|
+
/**
|
|
167
|
+
* The answer text of a response that *stopped*: every `delta.content` of a
|
|
168
|
+
* streamed response (or the `message.content` of a JSON one) in order, when
|
|
169
|
+
* some choice finished with `finish_reason: "stop"` and none with anything else.
|
|
170
|
+
*
|
|
171
|
+
* `undefined` means the response is not known to be final — undecodable, no
|
|
172
|
+
* finish reason, or one that asks for a tool. The caller additionally requires
|
|
173
|
+
* the same body to have decoded to zero tool calls. The text is bounded by
|
|
174
|
+
* {@link boundGrokFinalReply}, so a runaway answer can never make the turn's
|
|
175
|
+
* own report the thing that fails it.
|
|
176
|
+
*/
|
|
177
|
+
export declare function parseGrokFinalReply(body: Uint8Array, contentType: string | undefined): string | undefined;
|
|
178
|
+
/** `text` whole when it fits {@link GROK_FINAL_REPLY_MAX_BYTES}, else its head and a marker naming what was cut — never a failure. */
|
|
179
|
+
export declare function boundGrokFinalReply(text: string, maxBytes?: number): string;
|
|
180
|
+
//# sourceMappingURL=grokBrokerTurnMeter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grokBrokerTurnMeter.d.ts","sourceRoot":"","sources":["../../src/runtime/grokBrokerTurnMeter.ts"],"names":[],"mappings":"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"}
|