@noopolis/daimon 0.2.0 → 0.2.2
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 +6 -0
- package/dist/contracts/attentionContract.d.ts +25 -0
- package/dist/contracts/attentionContract.d.ts.map +1 -1
- package/dist/contracts/attentionContract.js +8 -1
- 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/organizationRuntimeContract.d.ts +76 -0
- package/dist/contracts/organizationRuntimeContract.d.ts.map +1 -1
- package/dist/contracts/organizationRuntimeContract.js +2 -0
- package/dist/contracts/runtimeContractManifest.d.ts +222 -15
- package/dist/contracts/runtimeContractManifest.d.ts.map +1 -1
- package/dist/contracts/runtimeContractManifest.js +35 -10
- 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/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/observability/causalEvents.d.ts +3 -3
- package/dist/observability/causalEvents.d.ts.map +1 -1
- package/dist/observability/causalEvents.js +4 -4
- package/dist/pi/cliEngineSpawn.d.ts +2 -2
- package/dist/pi/cliEngineSpawn.d.ts.map +1 -1
- package/dist/pi/cliEngineSpawn.js +7 -2
- package/dist/pi/cliEnvironment.d.ts.map +1 -1
- package/dist/pi/cliEnvironment.js +2 -0
- package/dist/pi/cliMcpRegistration.d.ts +1 -1
- package/dist/pi/cliMcpRegistration.d.ts.map +1 -1
- package/dist/pi/cliMcpRegistration.js +1 -1
- package/dist/pi/cliSession.d.ts +2 -0
- package/dist/pi/cliSession.d.ts.map +1 -1
- package/dist/pi/cliSession.js +3 -80
- 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/engineTaskClock.d.ts +9 -0
- package/dist/pi/engineTaskClock.d.ts.map +1 -0
- package/dist/pi/engineTaskClock.js +28 -0
- package/dist/pi/grokHomeMcpRegistration.d.ts.map +1 -1
- package/dist/pi/grokHomeMcpRegistration.js +2 -1
- package/dist/pi/grokSandbox.js +1 -1
- 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 +3 -1
- package/dist/pi/piAgentHandle.d.ts.map +1 -1
- package/dist/pi/piAgentHandle.js +5 -2
- package/dist/pi/piHarness.d.ts +8 -2
- package/dist/pi/piHarness.d.ts.map +1 -1
- package/dist/pi/piHarness.js +28 -12
- 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/wakeAcceptance.d.ts +1 -1
- package/dist/pi/wakeAcceptance.d.ts.map +1 -1
- package/dist/pi/wakeAcceptance.js +2 -2
- package/dist/runtime/agentSkillsDirectory.d.ts +25 -0
- package/dist/runtime/agentSkillsDirectory.d.ts.map +1 -0
- package/dist/runtime/agentSkillsDirectory.js +101 -0
- package/dist/runtime/agySubscriptionBootstrap.js +1 -1
- package/dist/runtime/agySubscriptionRealm.js +1 -1
- package/dist/runtime/attention.d.ts +5 -0
- package/dist/runtime/attention.d.ts.map +1 -1
- package/dist/runtime/attention.js +14 -1
- package/dist/runtime/attentionDispatcher.d.ts +14 -2
- package/dist/runtime/attentionDispatcher.d.ts.map +1 -1
- package/dist/runtime/attentionDispatcher.js +127 -33
- package/dist/runtime/cli.js +5 -0
- package/dist/runtime/contract-manifest.json +1 -1
- package/dist/runtime/contract-manifest.sha256 +1 -1
- package/dist/runtime/engineBrokerCapabilities.d.ts +10 -0
- package/dist/runtime/engineBrokerCapabilities.d.ts.map +1 -1
- package/dist/runtime/engineBrokerCapabilities.js +10 -0
- package/dist/runtime/engineBrokerControlClient.d.ts +12 -1
- package/dist/runtime/engineBrokerControlClient.d.ts.map +1 -1
- package/dist/runtime/engineBrokerControlClient.js +139 -43
- package/dist/runtime/engineBrokerCredentialJournal.d.ts +2 -0
- package/dist/runtime/engineBrokerCredentialJournal.d.ts.map +1 -1
- package/dist/runtime/engineBrokerCredentialJournal.js +9 -0
- package/dist/runtime/engineBrokerInferenceProtocol.d.ts +3 -2
- package/dist/runtime/engineBrokerInferenceProtocol.d.ts.map +1 -1
- package/dist/runtime/engineBrokerInferenceProtocol.js +4 -4
- package/dist/runtime/engineBrokerMcpCallLog.d.ts +11 -0
- package/dist/runtime/engineBrokerMcpCallLog.d.ts.map +1 -1
- package/dist/runtime/engineBrokerMcpCallLog.js +13 -1
- package/dist/runtime/engineBrokerMcpFacade.d.ts +5 -2
- package/dist/runtime/engineBrokerMcpFacade.d.ts.map +1 -1
- package/dist/runtime/engineBrokerMcpFacade.js +5 -2
- package/dist/runtime/engineBrokerNativeClient.js +2 -2
- package/dist/runtime/engineBrokerProtocol.d.ts +42 -10
- package/dist/runtime/engineBrokerProtocol.d.ts.map +1 -1
- package/dist/runtime/engineBrokerProtocol.js +97 -14
- package/dist/runtime/engineBrokerSealLedger.d.ts.map +1 -1
- package/dist/runtime/engineBrokerSealLedger.js +9 -0
- package/dist/runtime/engineBrokerService.d.ts +8 -2
- package/dist/runtime/engineBrokerService.d.ts.map +1 -1
- package/dist/runtime/engineBrokerService.js +95 -37
- package/dist/runtime/engineBrokerServiceCli.js +1 -1
- package/dist/runtime/engineBrokerServiceConfig.d.ts +15 -2
- package/dist/runtime/engineBrokerServiceConfig.d.ts.map +1 -1
- package/dist/runtime/engineBrokerServiceConfig.js +53 -11
- package/dist/runtime/engineBrokerTurnRegistry.d.ts +1 -1
- package/dist/runtime/engineBrokerTurnRegistry.d.ts.map +1 -1
- package/dist/runtime/engineBrokerTurnRegistry.js +7 -6
- package/dist/runtime/engineDispatcher.d.ts +2 -0
- package/dist/runtime/engineDispatcher.d.ts.map +1 -1
- package/dist/runtime/engineDispatcher.js +14 -2
- package/dist/runtime/engineReadiness.js +1 -1
- package/dist/runtime/grokBrokerCredentialAuthority.d.ts +1 -0
- package/dist/runtime/grokBrokerCredentialAuthority.d.ts.map +1 -1
- package/dist/runtime/grokBrokerCredentialAuthority.js +48 -22
- package/dist/runtime/grokBrokerCredentialReader.d.ts +1 -0
- package/dist/runtime/grokBrokerCredentialReader.d.ts.map +1 -1
- package/dist/runtime/grokBrokerCredentialReader.js +2 -1
- package/dist/runtime/grokBrokerProjection.d.ts +26 -2
- package/dist/runtime/grokBrokerProjection.d.ts.map +1 -1
- package/dist/runtime/grokBrokerProjection.js +18 -7
- 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 +17 -3
- package/dist/runtime/grokBrokerProxy.d.ts.map +1 -1
- package/dist/runtime/grokBrokerProxy.js +73 -9
- 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.map +1 -1
- package/dist/runtime/grokBrokerProxyRequest.js +17 -6
- package/dist/runtime/grokBrokerRealmLease.js +1 -1
- package/dist/runtime/grokBrokerRefresh.js +1 -1
- 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 +55 -3
- package/dist/runtime/grokBrokerTurnMeter.d.ts.map +1 -1
- package/dist/runtime/grokBrokerTurnMeter.js +90 -4
- package/dist/runtime/grokBrokerWorkerConfig.d.ts +5 -2
- package/dist/runtime/grokBrokerWorkerConfig.d.ts.map +1 -1
- package/dist/runtime/grokBrokerWorkerConfig.js +22 -3
- package/dist/runtime/grokEngineBroker.d.ts +43 -3
- package/dist/runtime/grokEngineBroker.d.ts.map +1 -1
- package/dist/runtime/grokEngineBroker.js +159 -71
- package/dist/runtime/grokEngineBrokerTurn.d.ts +32 -8
- package/dist/runtime/grokEngineBrokerTurn.d.ts.map +1 -1
- package/dist/runtime/grokEngineBrokerTurn.js +204 -21
- 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/grokInferenceProxy.d.ts.map +1 -1
- package/dist/runtime/grokInferenceProxy.js +3 -0
- package/dist/runtime/grokSubscriptionRealm.js +1 -1
- package/dist/runtime/grokWorkerAttestation.d.ts +12 -5
- package/dist/runtime/grokWorkerAttestation.d.ts.map +1 -1
- package/dist/runtime/grokWorkerAttestation.js +5 -3
- package/dist/runtime/grokWorkerHomeAttestation.d.ts +51 -5
- package/dist/runtime/grokWorkerHomeAttestation.d.ts.map +1 -1
- package/dist/runtime/grokWorkerHomeAttestation.js +103 -8
- package/dist/runtime/grokWorkerSkills.d.ts +86 -0
- package/dist/runtime/grokWorkerSkills.d.ts.map +1 -0
- package/dist/runtime/grokWorkerSkills.js +135 -0
- package/dist/runtime/index.d.ts +10 -2
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +8 -1
- package/dist/runtime/native/daimon-engine-broker +0 -0
- package/dist/runtime/organizationRuntime.d.ts +3 -0
- package/dist/runtime/organizationRuntime.d.ts.map +1 -1
- 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 +9 -0
- package/dist/runtime/organizationRuntimeControl.d.ts.map +1 -1
- package/dist/runtime/organizationRuntimeControl.js +72 -24
- package/dist/runtime/organizationRuntimeHost.d.ts.map +1 -1
- package/dist/runtime/organizationRuntimeHost.js +13 -4
- package/dist/runtime/organizationRuntimeParsing.d.ts.map +1 -1
- package/dist/runtime/organizationRuntimeParsing.js +4 -1
- package/dist/runtime/organizationRuntimeReadiness.d.ts.map +1 -1
- package/dist/runtime/organizationRuntimeReadiness.js +8 -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 +12 -0
- package/dist/runtime/physicalReadiness.d.ts.map +1 -1
- package/dist/runtime/physicalReadiness.js +43 -9
- package/dist/runtime/productionAgentTools.d.ts.map +1 -1
- package/dist/runtime/productionAgentTools.js +13 -5
- 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/schedule.d.ts.map +1 -1
- package/dist/runtime/schedule.js +12 -7
- package/dist/runtime/storeCoordination.d.ts +10 -0
- package/dist/runtime/storeCoordination.d.ts.map +1 -1
- package/dist/runtime/storeCoordination.js +23 -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/turnRequestLedger.d.ts +0 -5
- package/dist/runtime/turnRequestLedger.d.ts.map +1 -1
- package/dist/runtime/turnRequestLedger.js +23 -21
- 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 +9 -1
- package/dist/runtime/wakeAcceptanceProcessIdentity.d.ts.map +1 -1
- package/dist/runtime/wakeAcceptanceProcessIdentity.js +5 -1
- package/dist/runtime/wakeAcceptanceRecord.d.ts +2 -0
- package/dist/runtime/wakeAcceptanceRecord.d.ts.map +1 -1
- package/dist/runtime/wakeAcceptanceRecord.js +4 -2
- package/dist/runtime/wakeAcceptanceRetention.d.ts +25 -1
- package/dist/runtime/wakeAcceptanceRetention.d.ts.map +1 -1
- package/dist/runtime/wakeAcceptanceRetention.js +28 -2
- package/dist/runtime/wakeAcceptanceStore.d.ts +8 -8
- package/dist/runtime/wakeAcceptanceStore.d.ts.map +1 -1
- package/dist/runtime/wakeAcceptanceStore.js +66 -63
- package/dist/runtime/wakeFuse.d.ts +58 -3
- package/dist/runtime/wakeFuse.d.ts.map +1 -1
- package/dist/runtime/wakeFuse.js +106 -7
- 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 +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engineBrokerInferenceProtocol.d.ts","sourceRoot":"","sources":["../../src/runtime/engineBrokerInferenceProtocol.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"engineBrokerInferenceProtocol.d.ts","sourceRoot":"","sources":["../../src/runtime/engineBrokerInferenceProtocol.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAC7F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAgBtE,eAAO,MAAM,qCAAqC,0EAAoB,CAAC;AACvE,MAAM,MAAM,gCAAgC,GAAG,CAAC,OAAO,qCAAqC,CAAC,CAAC,MAAM,CAAC,CAAC;AACtG,eAAO,MAAM,6BAA6B,6BAAyG,CAAC;AAEpJ,KAAK,CAAC,GAAG,OAAO,kBAAkB,CAAC,sBAAsB,CAAC;AAC1D,MAAM,MAAM,4BAA4B,GACpC,QAAQ,CAAC;IAAE,OAAO,EAAE,CAAC,CAAC;IAAC,IAAI,EAAE,yBAAyB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,eAAe,CAAC;IAAC,eAAe,EAAE,yBAAyB,CAAC;IAAC,OAAO,EAAE,oBAAoB,CAAA;CAAE,CAAC,GAC/K,QAAQ,CAAC;IAAE,OAAO,EAAE,CAAC,CAAC;IAAC,IAAI,EAAE,yBAAyB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAClG,MAAM,MAAM,6BAA6B,GACrC,QAAQ,CAAC;IAAE,OAAO,EAAE,CAAC,CAAC;IAAC,IAAI,EAAE,iBAAiB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,6BAA6B,CAAC;IAAC,KAAK,EAAE,eAAe,CAAC;IAAC,eAAe,EAAE,yBAAyB,CAAC;IAAC,OAAO,EAAE,oBAAoB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,sBAAsB,CAAA;CAAE,CAAC,GACzS,QAAQ,CAAC;IAAE,OAAO,EAAE,CAAC,CAAC;IAAC,IAAI,EAAE,0BAA0B,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC,GACjH,QAAQ,CAAC;IAAE,OAAO,EAAE,CAAC,CAAC;IAAC,IAAI,EAAE,yBAAyB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,gCAAgC,CAAA;CAAE,CAAC,CAAC;AAEzH,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAO1C,4FAA4F;AAC5F,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,4BAA4B,CAUhI;AAED,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,6BAA6B,CAoBlI;AAED,eAAO,MAAM,kCAAkC,GAAI,MAAM,OAAO,KAAG,OAAmF,CAAC;AACvJ,eAAO,MAAM,mCAAmC,GAAI,MAAM,OAAO,KAAG,OAAkH,CAAC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { GROK_BROKER_MODELS, GROK_BROKER_REASONING_EFFORTS } from "../contracts/grokWorkerContract.js";
|
|
2
2
|
import { GROK_ENGINE_BROKER } from "../contracts/runtimeContractManifest.js";
|
|
3
3
|
/**
|
|
4
|
-
* Evaluator inference grant frames,
|
|
4
|
+
* Evaluator inference grant frames, introduced in v2 and carried by current v3.
|
|
5
5
|
*
|
|
6
6
|
* Both ends ship in this package (the organization-side client and the broker
|
|
7
|
-
* service),
|
|
8
|
-
* predates
|
|
7
|
+
* service), the kinds originally joined v2 without a version bump. A broker that
|
|
8
|
+
* predates a kind refuses it and closes the connection, which the
|
|
9
9
|
* client reports as `unavailable`. The native relay forwards frames opaquely
|
|
10
10
|
* and admits only the organization uid on `control.sock` (`SO_PEERCRED`), so
|
|
11
11
|
* that check is what limits grants to the evaluator side.
|
|
@@ -24,7 +24,7 @@ const member = (list, value) => { if (!list.includes(value))
|
|
|
24
24
|
const grantId = (value) => { if (typeof value !== "string" || !/^[a-f0-9]{32}$/u.test(value))
|
|
25
25
|
throw invalid(); return value; };
|
|
26
26
|
const TOKEN = new RegExp(`^${SPEC.tokenPrefix}[A-Za-z0-9_-]{43}$`, "u");
|
|
27
|
-
/** `input` has already passed the
|
|
27
|
+
/** `input` has already passed the current envelope checks; `requestId` is the parsed id. */
|
|
28
28
|
export function parseEngineBrokerInferenceRequest(input, requestId, version) {
|
|
29
29
|
if (input.kind === "request_inference_grant") {
|
|
30
30
|
exact(input, ["version", "kind", "requestId", "model", "reasoningEffort", "purpose"]);
|
|
@@ -132,6 +132,11 @@ export interface EngineBrokerMcpTunnelHandle {
|
|
|
132
132
|
deliver(): void;
|
|
133
133
|
close(): void;
|
|
134
134
|
}
|
|
135
|
+
/** Whether a turn has a tool call in flight, and when one last started or ended (the turn's registration before any). */
|
|
136
|
+
export type EngineBrokerMcpActivity = Readonly<{
|
|
137
|
+
inFlight: number;
|
|
138
|
+
lastActivityAt: number;
|
|
139
|
+
}>;
|
|
135
140
|
export declare class EngineBrokerMcpCallLog {
|
|
136
141
|
private readonly now;
|
|
137
142
|
private readonly turns;
|
|
@@ -155,6 +160,12 @@ export declare class EngineBrokerMcpCallLog {
|
|
|
155
160
|
refuse(turnId: string, reason: EngineBrokerMcpRefusalReason): void;
|
|
156
161
|
/** A POST whose body the facade refused to read (over its own bound), which is a call it cannot name. */
|
|
157
162
|
undecodable(turnId: string): void;
|
|
163
|
+
/**
|
|
164
|
+
* Tool-call activity only — never the GET tunnel, which stays open for the
|
|
165
|
+
* whole session whether or not anything happens. This is what an idle
|
|
166
|
+
* watchdog reads: a call in flight is work, an open tunnel is not.
|
|
167
|
+
*/
|
|
168
|
+
activity(turnId: string): EngineBrokerMcpActivity | undefined;
|
|
158
169
|
observe(turnId: string): EngineBrokerMcpCallObservation | undefined;
|
|
159
170
|
}
|
|
160
171
|
//# sourceMappingURL=engineBrokerMcpCallLog.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engineBrokerMcpCallLog.d.ts","sourceRoot":"","sources":["../../src/runtime/engineBrokerMcpCallLog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,iCAAiC,KAAK,CAAC;AACpD,eAAO,MAAM,8BAA8B,cAAc,CAAC;AAC1D,eAAO,MAAM,gCAAgC,gBAAgB,CAAC;AAC9D,mEAAmE;AACnE,eAAO,MAAM,2BAA2B,QAAsD,CAAC;AAG/F,qGAAqG;AACrG,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAE9C;;;;;;;GAOG;AACH,eAAO,MAAM,iCAAiC,qEAAsE,CAAC;AACrH,MAAM,MAAM,4BAA4B,GAAG,CAAC,OAAO,iCAAiC,CAAC,CAAC,MAAM,CAAC,CAAC;AAC9F,sKAAsK;AACtK,MAAM,MAAM,iCAAiC,GAAG,QAAQ,CAAC,MAAM,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC,CAAC;AAEvG,MAAM,MAAM,8BAA8B,GAAG,QAAQ,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAC/F,6HAA6H;AAC7H,MAAM,MAAM,yBAAyB,GAAG,QAAQ,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AACzF;;;;GAIG;AACH,MAAM,MAAM,gCAAgC,GAAG,QAAQ,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,yBAAyB,EAAE,CAAA;CAAE,CAAC,CAAC;AAC3J;;;;GAIG;AACH,MAAM,MAAM,8BAA8B,GAAG,QAAQ,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,SAAS,8BAA8B,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,gCAAgC,CAAC;IAAC,QAAQ,CAAC,EAAE,iCAAiC,CAAA;CAAE,CAAC,CAAC;AAElQ,kHAAkH;AAClH,MAAM,WAAW,yBAAyB;IAAG,MAAM,IAAI,IAAI,CAAC;IAAC,KAAK,IAAI,IAAI,CAAA;CAAE;AAE5E,qHAAqH;AACrH,MAAM,WAAW,2BAA2B;IAAG,OAAO,IAAI,IAAI,CAAC;IAAC,KAAK,IAAI,IAAI,CAAA;CAAE;
|
|
1
|
+
{"version":3,"file":"engineBrokerMcpCallLog.d.ts","sourceRoot":"","sources":["../../src/runtime/engineBrokerMcpCallLog.ts"],"names":[],"mappings":"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"}
|
|
@@ -97,7 +97,7 @@ export class EngineBrokerMcpCallLog {
|
|
|
97
97
|
this.now = now;
|
|
98
98
|
}
|
|
99
99
|
/** A turn the facade registered. Re-opening an id resets it: a turn id is unique per turn. */
|
|
100
|
-
open(turnId) { this.turns.set(turnId, { started: 0, answered: 0, undecoded: 0, live: new Set(), ended: [], tunnelsOpened: 0, tunnelsClosed: 0, tunnelsDelivered: 0, openTunnels: new Set(), refusals: noRefusals() }); }
|
|
100
|
+
open(turnId) { this.turns.set(turnId, { started: 0, answered: 0, undecoded: 0, live: new Set(), ended: [], tunnelsOpened: 0, tunnelsClosed: 0, tunnelsDelivered: 0, openTunnels: new Set(), refusals: noRefusals(), activityAt: this.now() }); }
|
|
101
101
|
close(turnId) { this.turns.delete(turnId); }
|
|
102
102
|
/** A POST body the facade is about to relay. Anything that is not a `tools/call` records nothing. */
|
|
103
103
|
begin(turnId, body) {
|
|
@@ -114,6 +114,7 @@ export class EngineBrokerMcpCallLog {
|
|
|
114
114
|
const startedAt = this.now();
|
|
115
115
|
const records = names.map((name) => ({ name, startedAt }));
|
|
116
116
|
log.started += records.length;
|
|
117
|
+
log.activityAt = startedAt;
|
|
117
118
|
for (const record of records)
|
|
118
119
|
log.live.add(record);
|
|
119
120
|
let settled = false;
|
|
@@ -122,6 +123,7 @@ export class EngineBrokerMcpCallLog {
|
|
|
122
123
|
if (settled)
|
|
123
124
|
return;
|
|
124
125
|
settled = true;
|
|
126
|
+
log.activityAt = this.now();
|
|
125
127
|
log.answered += records.length;
|
|
126
128
|
for (const record of records)
|
|
127
129
|
log.live.delete(record);
|
|
@@ -131,6 +133,7 @@ export class EngineBrokerMcpCallLog {
|
|
|
131
133
|
return;
|
|
132
134
|
settled = true;
|
|
133
135
|
const endedAt = this.now();
|
|
136
|
+
log.activityAt = endedAt;
|
|
134
137
|
for (const record of records) {
|
|
135
138
|
log.live.delete(record);
|
|
136
139
|
record.endedAt = endedAt;
|
|
@@ -172,6 +175,15 @@ export class EngineBrokerMcpCallLog {
|
|
|
172
175
|
/** A POST whose body the facade refused to read (over its own bound), which is a call it cannot name. */
|
|
173
176
|
undecodable(turnId) { const log = this.turns.get(turnId); if (log !== undefined)
|
|
174
177
|
log.undecoded += 1; }
|
|
178
|
+
/**
|
|
179
|
+
* Tool-call activity only — never the GET tunnel, which stays open for the
|
|
180
|
+
* whole session whether or not anything happens. This is what an idle
|
|
181
|
+
* watchdog reads: a call in flight is work, an open tunnel is not.
|
|
182
|
+
*/
|
|
183
|
+
activity(turnId) {
|
|
184
|
+
const log = this.turns.get(turnId);
|
|
185
|
+
return log === undefined ? undefined : { inFlight: log.live.size, lastActivityAt: log.activityAt };
|
|
186
|
+
}
|
|
175
187
|
observe(turnId) {
|
|
176
188
|
const log = this.turns.get(turnId);
|
|
177
189
|
if (log === undefined)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ServerResponse } from "node:http";
|
|
2
|
-
import { type EngineBrokerMcpCallObservation } from "./engineBrokerMcpCallLog.js";
|
|
2
|
+
import { type EngineBrokerMcpActivity, type EngineBrokerMcpCallObservation } from "./engineBrokerMcpCallLog.js";
|
|
3
3
|
export declare const ENGINE_BROKER_MCP_FACADE_PORT = 43124;
|
|
4
4
|
/** Requests one worker round may legitimately make: its `search_tool`, its `use_tool`, and one spare for a retry or a second discovery. */
|
|
5
5
|
export declare const ENGINE_BROKER_MCP_ROUND_REQUESTS = 3;
|
|
@@ -25,10 +25,13 @@ export declare const ENGINE_BROKER_MCP_SESSION_REQUESTS = 5;
|
|
|
25
25
|
* two multiplicands above each say what they are.
|
|
26
26
|
*/
|
|
27
27
|
export declare const ENGINE_BROKER_MCP_CAPABILITY_REQUESTS: number;
|
|
28
|
+
/** Fallback only: a brokered turn passes `engineBrokerCapabilityTtlMs(limits.timeoutMs)`. */
|
|
28
29
|
export declare const ENGINE_BROKER_MCP_CAPABILITY_TTL_MS: number;
|
|
29
30
|
export declare function startEngineBrokerMcpFacade(): Promise<{
|
|
30
|
-
register(agentId: string, turnId: string, endpoint: string): string;
|
|
31
|
+
register(agentId: string, turnId: string, endpoint: string, ttlMs?: number): string;
|
|
31
32
|
revoke(turnId: string): void;
|
|
33
|
+
/** Tool-call activity for the broker's idle watchdog; `undefined` for a turn never registered. */
|
|
34
|
+
activity: (turnId: string) => EngineBrokerMcpActivity | undefined;
|
|
32
35
|
/**
|
|
33
36
|
* What the facade saw of this turn's tool calls, GET tunnels and refusals,
|
|
34
37
|
* or `undefined` for a turn
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engineBrokerMcpFacade.d.ts","sourceRoot":"","sources":["../../src/runtime/engineBrokerMcpFacade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAIpF,OAAO,EAA0B,KAAK,8BAA8B,EAAuE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"engineBrokerMcpFacade.d.ts","sourceRoot":"","sources":["../../src/runtime/engineBrokerMcpFacade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAIpF,OAAO,EAA0B,KAAK,uBAAuB,EAAE,KAAK,8BAA8B,EAAuE,MAAM,6BAA6B,CAAC;AA4C7M,eAAO,MAAM,6BAA6B,QAAS,CAAC;AAEpD,2IAA2I;AAC3I,eAAO,MAAM,gCAAgC,IAAI,CAAC;AAClD,uJAAuJ;AACvJ,eAAO,MAAM,kCAAkC,IAAI,CAAC;AACpD;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,qCAAqC,QAAgG,CAAC;AACnJ,6FAA6F;AAC7F,eAAO,MAAM,mCAAmC,QAAc,CAAC;AAI/D,wBAAsB,0BAA0B;sBA0G1B,MAAM,UAAU,MAAM,YAAY,MAAM,UAAS,MAAM,GAAyC,MAAM;mBAQzG,MAAM,GAAG,IAAI;IAM5B,kGAAkG;uBAC/E,MAAM,KAAG,uBAAuB,GAAG,SAAS;IAC/D;;;;OAIG;sBACe,MAAM,KAAG,8BAA8B,GAAG,SAAS;iBACpD,OAAO,CAAC,IAAI,CAAC;GAUjC;AAoED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAehG"}
|
|
@@ -70,6 +70,7 @@ export const ENGINE_BROKER_MCP_SESSION_REQUESTS = 5;
|
|
|
70
70
|
* two multiplicands above each say what they are.
|
|
71
71
|
*/
|
|
72
72
|
export const ENGINE_BROKER_MCP_CAPABILITY_REQUESTS = GROK_WORKER_MAX_TURNS * ENGINE_BROKER_MCP_ROUND_REQUESTS + ENGINE_BROKER_MCP_SESSION_REQUESTS;
|
|
73
|
+
/** Fallback only: a brokered turn passes `engineBrokerCapabilityTtlMs(limits.timeoutMs)`. */
|
|
73
74
|
export const ENGINE_BROKER_MCP_CAPABILITY_TTL_MS = 15 * 60_000;
|
|
74
75
|
class FacadeRefusal extends Error {
|
|
75
76
|
}
|
|
@@ -188,7 +189,7 @@ export async function startEngineBrokerMcpFacade() {
|
|
|
188
189
|
server.listen(ENGINE_BROKER_MCP_FACADE_PORT, "127.0.0.1", () => { server.off("error", reject); resolve(); });
|
|
189
190
|
});
|
|
190
191
|
return {
|
|
191
|
-
register(agentId, turnId, endpoint) {
|
|
192
|
+
register(agentId, turnId, endpoint, ttlMs = ENGINE_BROKER_MCP_CAPABILITY_TTL_MS) {
|
|
192
193
|
const url = new URL(endpoint);
|
|
193
194
|
if (url.protocol !== "http:" || url.hostname !== "127.0.0.1" || url.pathname !== "/mcp")
|
|
194
195
|
throw new TypeError("invalid scoped MCP mount");
|
|
@@ -196,7 +197,7 @@ export async function startEngineBrokerMcpFacade() {
|
|
|
196
197
|
throw new Error("MCP turn already registered");
|
|
197
198
|
targets.set(turnId, url.href);
|
|
198
199
|
calls.open(turnId);
|
|
199
|
-
return capabilities.issue(agentId, turnId,
|
|
200
|
+
return capabilities.issue(agentId, turnId, ttlMs, ENGINE_BROKER_MCP_CAPABILITY_REQUESTS);
|
|
200
201
|
},
|
|
201
202
|
revoke(turnId) {
|
|
202
203
|
targets.delete(turnId);
|
|
@@ -204,6 +205,8 @@ export async function startEngineBrokerMcpFacade() {
|
|
|
204
205
|
endTurnStreams(turnId);
|
|
205
206
|
calls.close(turnId);
|
|
206
207
|
},
|
|
208
|
+
/** Tool-call activity for the broker's idle watchdog; `undefined` for a turn never registered. */
|
|
209
|
+
activity: (turnId) => calls.activity(turnId),
|
|
207
210
|
/**
|
|
208
211
|
* What the facade saw of this turn's tool calls, GET tunnels and refusals,
|
|
209
212
|
* or `undefined` for a turn
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { spawn } from "
|
|
1
|
+
import { spawnRealTime as spawn } from "./taskClockProcess.js";
|
|
2
2
|
import { redactCredentialText } from "../core/credentialRedaction.js";
|
|
3
3
|
import { boundedDiagnosticWindow, CLI_ENGINE_MAX_DIAGNOSTIC_BYTES } from "../pi/cliChildOutput.js";
|
|
4
4
|
import { terminateChild, trackCliChild } from "../pi/cliProcess.js";
|
|
@@ -19,7 +19,7 @@ export class NativeBrokerTurnFailure extends Error {
|
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
export async function runNativeBrokerTurn(executable, input, signal) {
|
|
22
|
-
const frame = encodeNativeBrokerTurn(input), child = trackCliChild(spawn(executable, ["--client"], { detached: process.platform !== "win32", env: { LANG: "C", LC_ALL: "C", TZ: "UTC" }, stdio: ["pipe", "pipe", "ignore"], ...(signal === undefined ? {} : { signal }) }));
|
|
22
|
+
const frame = encodeNativeBrokerTurn(input), child = trackCliChild(spawn(executable, ["--client"], { detached: process.platform !== "win32", env: { LANG: "C", LC_ALL: "C", TZ: "UTC", DAIMON_BROKER_PID: String(process.pid) }, stdio: ["pipe", "pipe", "ignore"], ...(signal === undefined ? {} : { signal }) }));
|
|
23
23
|
const chunks = [];
|
|
24
24
|
let bytes = 0;
|
|
25
25
|
child.stdout.on("data", (chunk) => { bytes += chunk.length; if (bytes <= ENGINE_BROKER_NATIVE_RESULT_BYTES + MAX_OUTPUT)
|
|
@@ -1,17 +1,27 @@
|
|
|
1
|
+
import { type BrokerClockObservation } from "./grokBrokerTaskClock.js";
|
|
1
2
|
import { type EngineBrokerInferenceRequest, type EngineBrokerInferenceResponse } from "./engineBrokerInferenceProtocol.js";
|
|
2
3
|
import { type EngineBrokerMcpCallObservation } from "./engineBrokerMcpCallLog.js";
|
|
3
4
|
import { type EngineBrokerTurnAccounting, type EngineBrokerTurnLimitOverrides } from "./engineBrokerTurnAccounting.js";
|
|
4
5
|
/**
|
|
5
|
-
* Control protocol
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* turns sealed before the upgrade keep replaying.
|
|
6
|
+
* Control protocol v4 adds slot routing and reset. Both ends ship in the same
|
|
7
|
+
* package; v1/v2/v3 frames are refused on the wire. Durable terminal adapters
|
|
8
|
+
* retain those record formats. A missing slot is allowed only for a unique
|
|
9
|
+
* agent registration (unclocked production compatibility).
|
|
10
10
|
*/
|
|
11
|
-
declare const VERSION: "noopolis.daimon.engine-broker.
|
|
12
|
-
export declare const ENGINE_BROKER_VERSION: "noopolis.daimon.engine-broker.
|
|
11
|
+
declare const VERSION: "noopolis.daimon.engine-broker.v4";
|
|
12
|
+
export declare const ENGINE_BROKER_VERSION: "noopolis.daimon.engine-broker.v4";
|
|
13
13
|
declare const V1: "noopolis.daimon.engine-broker.v1";
|
|
14
14
|
export declare const ENGINE_BROKER_MAX_FRAME_BYTES = 1048576;
|
|
15
|
+
/** Version refusal is independent of the incompatible operation's schema. */
|
|
16
|
+
export type EngineBrokerProtocolDiagnostic = Readonly<{
|
|
17
|
+
kind: "protocol_mismatch";
|
|
18
|
+
receivedVersion: string;
|
|
19
|
+
expectedVersion: string;
|
|
20
|
+
}>;
|
|
21
|
+
export declare class EngineBrokerProtocolMismatch extends TypeError {
|
|
22
|
+
readonly diagnostic: EngineBrokerProtocolDiagnostic;
|
|
23
|
+
constructor(received: unknown, expected?: unknown);
|
|
24
|
+
}
|
|
15
25
|
export type EngineBrokerRequest = Readonly<{
|
|
16
26
|
version: typeof VERSION;
|
|
17
27
|
kind: "health";
|
|
@@ -21,16 +31,23 @@ export type EngineBrokerRequest = Readonly<{
|
|
|
21
31
|
kind: "start_turn";
|
|
22
32
|
requestId: string;
|
|
23
33
|
turnId: string;
|
|
34
|
+
slot?: number;
|
|
24
35
|
agentId: string;
|
|
25
36
|
wakeId: string;
|
|
26
37
|
prompt: string;
|
|
27
38
|
mcpEndpoint: string;
|
|
28
39
|
limits?: EngineBrokerTurnLimitOverrides;
|
|
40
|
+
processClock?: string;
|
|
29
41
|
}> | Readonly<{
|
|
30
42
|
version: typeof VERSION;
|
|
31
43
|
kind: "cancel_turn";
|
|
32
44
|
requestId: string;
|
|
33
45
|
turnId: string;
|
|
46
|
+
}> | Readonly<{
|
|
47
|
+
version: typeof VERSION;
|
|
48
|
+
kind: "reset_slot";
|
|
49
|
+
requestId: string;
|
|
50
|
+
slot: number;
|
|
34
51
|
}> | EngineBrokerInferenceRequest;
|
|
35
52
|
/**
|
|
36
53
|
* `reason` is the worker's own last words (`engineBrokerNativeClient.ts`),
|
|
@@ -52,6 +69,11 @@ export interface EngineBrokerFailureDiagnostic {
|
|
|
52
69
|
startTicks: string;
|
|
53
70
|
}
|
|
54
71
|
export declare const ENGINE_BROKER_MAX_DIAGNOSTIC_REASON_BYTES = 768;
|
|
72
|
+
/** Operational state after sealing; never raw filesystem errors or worker text. */
|
|
73
|
+
export declare const ENGINE_BROKER_TASK_CLOCK_RESET_FAILED = "task clock reset failed; slot fenced until restart";
|
|
74
|
+
export type EngineBrokerCleanupObservation = Readonly<{
|
|
75
|
+
cleanupDiagnostic?: typeof ENGINE_BROKER_TASK_CLOCK_RESET_FAILED;
|
|
76
|
+
}>;
|
|
55
77
|
export type EngineBrokerResponse = Readonly<{
|
|
56
78
|
version: typeof VERSION;
|
|
57
79
|
kind: "ready";
|
|
@@ -77,7 +99,7 @@ export type EngineBrokerResponse = Readonly<{
|
|
|
77
99
|
workerPid: number;
|
|
78
100
|
workerUid: number;
|
|
79
101
|
workerStartTime: string;
|
|
80
|
-
}> & EngineBrokerTurnAccounting) | (Readonly<{
|
|
102
|
+
}> & EngineBrokerTurnAccounting & BrokerClockObservation & EngineBrokerCleanupObservation) | (Readonly<{
|
|
81
103
|
version: typeof VERSION;
|
|
82
104
|
kind: "failed";
|
|
83
105
|
requestId: string;
|
|
@@ -85,7 +107,12 @@ export type EngineBrokerResponse = Readonly<{
|
|
|
85
107
|
code: EngineBrokerFailureCode;
|
|
86
108
|
diagnostic?: EngineBrokerFailureDiagnostic;
|
|
87
109
|
mcpCalls?: EngineBrokerMcpCallObservation;
|
|
88
|
-
}> & EngineBrokerTurnAccounting) |
|
|
110
|
+
}> & EngineBrokerTurnAccounting & BrokerClockObservation & EngineBrokerCleanupObservation) | Readonly<{
|
|
111
|
+
version: typeof VERSION;
|
|
112
|
+
kind: "slot_reset";
|
|
113
|
+
requestId: string;
|
|
114
|
+
slot: number;
|
|
115
|
+
}> | EngineBrokerInferenceResponse;
|
|
89
116
|
/**
|
|
90
117
|
* The one name for a fenced credential realm. The turn's failure code, the
|
|
91
118
|
* proxy's refusal reason on a worker request, and the grant path's 401 body
|
|
@@ -125,7 +152,12 @@ export declare function parseEngineBrokerResponse(value: unknown): EngineBrokerR
|
|
|
125
152
|
* the wire.
|
|
126
153
|
*/
|
|
127
154
|
export declare function parseEngineBrokerV1TerminalResponse(value: unknown): EngineBrokerV1TerminalResponse;
|
|
128
|
-
export declare function
|
|
155
|
+
export declare function parseEngineBrokerSlot(value: unknown): number;
|
|
156
|
+
/** v3 survives only in durable records. */
|
|
157
|
+
export declare function parseEngineBrokerV3TerminalResponse(value: unknown): EngineBrokerTerminalResponse;
|
|
158
|
+
/** v2 survives only in durable records. The wire always refuses it. */
|
|
159
|
+
export declare function parseEngineBrokerV2TerminalResponse(value: unknown): EngineBrokerTerminalResponse;
|
|
160
|
+
export declare function encodeEngineBrokerFrame(value: EngineBrokerRequest | EngineBrokerResponse | EngineBrokerProtocolDiagnostic): Buffer;
|
|
129
161
|
export declare class EngineBrokerFrameDecoder {
|
|
130
162
|
private buffered;
|
|
131
163
|
push(chunk: Uint8Array): unknown[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engineBrokerProtocol.d.ts","sourceRoot":"","sources":["../../src/runtime/engineBrokerProtocol.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkJ,KAAK,4BAA4B,EAAE,KAAK,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAC3Q,OAAO,EAAmI,KAAK,8BAA8B,EAAiF,MAAM,6BAA6B,CAAC;AAClS,OAAO,EAAwE,KAAK,0BAA0B,EAAE,KAAK,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AAE7L
|
|
1
|
+
{"version":3,"file":"engineBrokerProtocol.d.ts","sourceRoot":"","sources":["../../src/runtime/engineBrokerProtocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,33 @@
|
|
|
1
|
+
import { parseBrokerProcessClock } from "./grokBrokerTaskClock.js";
|
|
2
|
+
import { parseGrokBrokerProviderClockObservation } from "./grokBrokerProviderClock.js";
|
|
1
3
|
import { isEngineBrokerInferenceRequestKind, isEngineBrokerInferenceResponseKind, parseEngineBrokerInferenceRequest, parseEngineBrokerInferenceResponse } from "./engineBrokerInferenceProtocol.js";
|
|
2
4
|
import { ENGINE_BROKER_MCP_CALL_NAME, ENGINE_BROKER_MCP_OUTSTANDING_MAX, ENGINE_BROKER_MCP_REFUSAL_REASONS, ENGINE_BROKER_MCP_TUNNEL_MAX } from "./engineBrokerMcpCallLog.js";
|
|
3
5
|
import { parseEngineBrokerTurnAccounting, parseEngineBrokerTurnLimitOverrides } from "./engineBrokerTurnAccounting.js";
|
|
4
6
|
/**
|
|
5
|
-
* Control protocol
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* turns sealed before the upgrade keep replaying.
|
|
7
|
+
* Control protocol v4 adds slot routing and reset. Both ends ship in the same
|
|
8
|
+
* package; v1/v2/v3 frames are refused on the wire. Durable terminal adapters
|
|
9
|
+
* retain those record formats. A missing slot is allowed only for a unique
|
|
10
|
+
* agent registration (unclocked production compatibility).
|
|
10
11
|
*/
|
|
11
|
-
const VERSION = "noopolis.daimon.engine-broker.
|
|
12
|
+
const VERSION = "noopolis.daimon.engine-broker.v4";
|
|
12
13
|
export const ENGINE_BROKER_VERSION = VERSION;
|
|
13
14
|
const V1 = "noopolis.daimon.engine-broker.v1";
|
|
14
15
|
export const ENGINE_BROKER_MAX_FRAME_BYTES = 1_048_576;
|
|
16
|
+
const PROTOCOL_NAME = /^noopolis\.daimon\.engine-broker\.v[0-9]{1,6}$/u;
|
|
17
|
+
const boundedProtocol = (value) => typeof value === "string" && PROTOCOL_NAME.test(value) ? value : "<invalid>";
|
|
18
|
+
export class EngineBrokerProtocolMismatch extends TypeError {
|
|
19
|
+
diagnostic;
|
|
20
|
+
constructor(received, expected = VERSION) {
|
|
21
|
+
const receivedVersion = boundedProtocol(received);
|
|
22
|
+
const expectedVersion = boundedProtocol(expected);
|
|
23
|
+
super(`invalid broker frame: protocol version mismatch (received ${receivedVersion}; expected ${expectedVersion})`);
|
|
24
|
+
this.diagnostic = { kind: "protocol_mismatch", receivedVersion, expectedVersion };
|
|
25
|
+
}
|
|
26
|
+
}
|
|
15
27
|
const ID = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/u;
|
|
16
28
|
export const ENGINE_BROKER_MAX_DIAGNOSTIC_REASON_BYTES = 768;
|
|
29
|
+
/** Operational state after sealing; never raw filesystem errors or worker text. */
|
|
30
|
+
export const ENGINE_BROKER_TASK_CLOCK_RESET_FAILED = "task clock reset failed; slot fenced until restart";
|
|
17
31
|
/**
|
|
18
32
|
* The one name for a fenced credential realm. The turn's failure code, the
|
|
19
33
|
* proxy's refusal reason on a worker request, and the grant path's 401 body
|
|
@@ -39,8 +53,11 @@ const text = (value, maxBytes) => {
|
|
|
39
53
|
};
|
|
40
54
|
const id = (value) => { const result = text(value, 128); if (!ID.test(result))
|
|
41
55
|
throw new TypeError("invalid broker frame"); return result; };
|
|
42
|
-
const version = (value) => {
|
|
43
|
-
|
|
56
|
+
const version = (value) => {
|
|
57
|
+
if (value !== VERSION)
|
|
58
|
+
throw new EngineBrokerProtocolMismatch(value);
|
|
59
|
+
return VERSION;
|
|
60
|
+
};
|
|
44
61
|
export function parseEngineBrokerRequest(value) {
|
|
45
62
|
const input = record(value);
|
|
46
63
|
version(input.version);
|
|
@@ -50,7 +67,16 @@ export function parseEngineBrokerRequest(value) {
|
|
|
50
67
|
}
|
|
51
68
|
if (input.kind === "start_turn") {
|
|
52
69
|
const fields = ["version", "kind", "requestId", "turnId", "agentId", "wakeId", "prompt", "mcpEndpoint"];
|
|
53
|
-
exact(input, input.
|
|
70
|
+
exact(input, [...fields, ...(input.slot === undefined ? [] : ["slot"]), ...(input.limits === undefined ? [] : ["limits"]), ...(input.processClock === undefined ? [] : ["processClock"])]);
|
|
71
|
+
let processClock;
|
|
72
|
+
if (input.processClock !== undefined) {
|
|
73
|
+
try {
|
|
74
|
+
processClock = parseBrokerProcessClock(input.processClock);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
throw new TypeError("invalid broker frame");
|
|
78
|
+
}
|
|
79
|
+
}
|
|
54
80
|
const mcpEndpoint = text(input.mcpEndpoint, 2048);
|
|
55
81
|
const url = new URL(mcpEndpoint);
|
|
56
82
|
if (url.protocol !== "http:" || url.hostname !== "127.0.0.1" || url.pathname !== "/mcp")
|
|
@@ -64,7 +90,11 @@ export function parseEngineBrokerRequest(value) {
|
|
|
64
90
|
throw new TypeError("invalid broker frame");
|
|
65
91
|
}
|
|
66
92
|
}
|
|
67
|
-
return { version: VERSION, kind: "start_turn", requestId: id(input.requestId), turnId: id(input.turnId), agentId: id(input.agentId), wakeId: id(input.wakeId), prompt: text(input.prompt, 65_536), mcpEndpoint, ...(limits === undefined ? {} : { limits }) };
|
|
93
|
+
return { version: VERSION, kind: "start_turn", ...(input.slot === undefined ? {} : { slot: parseEngineBrokerSlot(input.slot) }), requestId: id(input.requestId), turnId: id(input.turnId), agentId: id(input.agentId), wakeId: id(input.wakeId), prompt: text(input.prompt, 65_536), mcpEndpoint, ...(limits === undefined ? {} : { limits }), ...(processClock === undefined ? {} : { processClock }) };
|
|
94
|
+
}
|
|
95
|
+
if (input.kind === "reset_slot") {
|
|
96
|
+
exact(input, ["version", "kind", "requestId", "slot"]);
|
|
97
|
+
return { version: VERSION, kind: "reset_slot", requestId: id(input.requestId), slot: parseEngineBrokerSlot(input.slot) };
|
|
68
98
|
}
|
|
69
99
|
if (input.kind === "cancel_turn") {
|
|
70
100
|
exact(input, ["version", "kind", "requestId", "turnId"]);
|
|
@@ -76,6 +106,14 @@ export function parseEngineBrokerRequest(value) {
|
|
|
76
106
|
}
|
|
77
107
|
export function parseEngineBrokerResponse(value) {
|
|
78
108
|
const input = record(value);
|
|
109
|
+
if (input.kind === "protocol_mismatch") {
|
|
110
|
+
exact(input, ["kind", "receivedVersion", "expectedVersion"]);
|
|
111
|
+
for (const field of [input.receivedVersion, input.expectedVersion]) {
|
|
112
|
+
if (field !== "<invalid>" && boundedProtocol(field) !== field)
|
|
113
|
+
throw new TypeError("invalid broker frame");
|
|
114
|
+
}
|
|
115
|
+
throw new EngineBrokerProtocolMismatch(input.receivedVersion, input.expectedVersion);
|
|
116
|
+
}
|
|
79
117
|
version(input.version);
|
|
80
118
|
if (input.kind === "ready") {
|
|
81
119
|
exact(input, ["version", "kind", "requestId", "brokerUid", "providerProxyPort", "mcpFacadePort", "registrations", "credentialStale", "realmLease", "workerIsolation"]);
|
|
@@ -83,6 +121,10 @@ export function parseEngineBrokerResponse(value) {
|
|
|
83
121
|
throw new TypeError("invalid broker frame");
|
|
84
122
|
return { version: VERSION, kind: "ready", requestId: id(input.requestId), brokerUid: 2100, providerProxyPort: 43123, mcpFacadePort: 43124, registrations: input.registrations, credentialStale: false, realmLease: true, workerIsolation: true };
|
|
85
123
|
}
|
|
124
|
+
if (input.kind === "slot_reset") {
|
|
125
|
+
exact(input, ["version", "kind", "requestId", "slot"]);
|
|
126
|
+
return { version: VERSION, kind: "slot_reset", requestId: id(input.requestId), slot: parseEngineBrokerSlot(input.slot) };
|
|
127
|
+
}
|
|
86
128
|
if (input.kind === "accepted") {
|
|
87
129
|
exact(input, ["version", "kind", "requestId", "turnId"]);
|
|
88
130
|
return { version: VERSION, kind: "accepted", requestId: id(input.requestId), turnId: id(input.turnId) };
|
|
@@ -104,21 +146,62 @@ export function parseEngineBrokerV1TerminalResponse(value) {
|
|
|
104
146
|
throw new TypeError("invalid broker frame");
|
|
105
147
|
return parseTerminal(input, V1);
|
|
106
148
|
}
|
|
149
|
+
export function parseEngineBrokerSlot(value) {
|
|
150
|
+
if (!Number.isSafeInteger(value) || value < 0)
|
|
151
|
+
throw new TypeError("invalid broker slot");
|
|
152
|
+
return value;
|
|
153
|
+
}
|
|
154
|
+
/** v3 survives only in durable records. */
|
|
155
|
+
export function parseEngineBrokerV3TerminalResponse(value) {
|
|
156
|
+
const input = record(value);
|
|
157
|
+
if (input.version !== "noopolis.daimon.engine-broker.v3" || (input.kind !== "completed" && input.kind !== "failed"))
|
|
158
|
+
throw new TypeError("invalid broker frame");
|
|
159
|
+
return parseTerminal({ ...input, version: VERSION }, VERSION);
|
|
160
|
+
}
|
|
161
|
+
/** v2 survives only in durable records. The wire always refuses it. */
|
|
162
|
+
export function parseEngineBrokerV2TerminalResponse(value) {
|
|
163
|
+
const input = record(value);
|
|
164
|
+
if (input.version !== "noopolis.daimon.engine-broker.v2" ||
|
|
165
|
+
(input.kind !== "completed" && input.kind !== "failed") ||
|
|
166
|
+
Object.hasOwn(input, "shellClock") || Object.hasOwn(input, "providerClock") ||
|
|
167
|
+
Object.hasOwn(input, "cleanupDiagnostic")) {
|
|
168
|
+
throw new TypeError("invalid broker frame");
|
|
169
|
+
}
|
|
170
|
+
return parseTerminal({ ...input, version: VERSION }, VERSION);
|
|
171
|
+
}
|
|
107
172
|
function parseTerminal(input, expected) {
|
|
108
173
|
const accounting = expected === VERSION ? ACCOUNTING : [];
|
|
174
|
+
const shellClock = input.shellClock;
|
|
175
|
+
if (shellClock !== undefined && (expected !== VERSION || !["task", "real", "gap"].includes(shellClock)))
|
|
176
|
+
throw new TypeError("invalid broker frame");
|
|
177
|
+
if (input.providerClock !== undefined && expected !== VERSION)
|
|
178
|
+
throw new TypeError("invalid broker frame");
|
|
179
|
+
const cleanupDiagnostic = input.cleanupDiagnostic;
|
|
180
|
+
if (cleanupDiagnostic !== undefined &&
|
|
181
|
+
(expected !== VERSION || cleanupDiagnostic !== ENGINE_BROKER_TASK_CLOCK_RESET_FAILED)) {
|
|
182
|
+
throw new TypeError("invalid broker frame");
|
|
183
|
+
}
|
|
184
|
+
const observation = {
|
|
185
|
+
...(cleanupDiagnostic === undefined ? {} : { cleanupDiagnostic }),
|
|
186
|
+
...(shellClock === undefined ? {} : { shellClock: shellClock }),
|
|
187
|
+
...(input.providerClock === undefined ? {} : {
|
|
188
|
+
providerClock: parseGrokBrokerProviderClockObservation(input.providerClock)
|
|
189
|
+
})
|
|
190
|
+
};
|
|
191
|
+
const clockFields = Object.keys(observation);
|
|
109
192
|
if (input.kind === "completed") {
|
|
110
|
-
exact(input, ["version", "kind", "requestId", "turnId", "text", "workerPid", "workerUid", "workerStartTime", ...accounting]);
|
|
193
|
+
exact(input, ["version", "kind", "requestId", "turnId", "text", "workerPid", "workerUid", "workerStartTime", ...accounting, ...clockFields]);
|
|
111
194
|
if (!Number.isSafeInteger(input.workerPid) || input.workerPid < 1 || !Number.isSafeInteger(input.workerUid) || input.workerUid < 1)
|
|
112
195
|
throw new TypeError("invalid broker frame");
|
|
113
196
|
const base = { kind: "completed", requestId: id(input.requestId), turnId: id(input.turnId), text: text(input.text, 262_144), workerPid: input.workerPid, workerUid: input.workerUid, workerStartTime: id(input.workerStartTime) };
|
|
114
|
-
return expected === VERSION ? { version: VERSION, ...base, ...parseEngineBrokerTurnAccounting(input, "completed") } : { version: V1, ...base };
|
|
197
|
+
return expected === VERSION ? { version: VERSION, ...base, ...observation, ...parseEngineBrokerTurnAccounting(input, "completed") } : { version: V1, ...base };
|
|
115
198
|
}
|
|
116
199
|
// `mcpCalls` is the broker's own observation of the worker's tool calls
|
|
117
200
|
// (`engineBrokerMcpCallLog.ts`), additive in v2 and never part of a v1
|
|
118
201
|
// record, which predates the instrument entirely.
|
|
119
202
|
if (expected === V1 && input.mcpCalls !== undefined)
|
|
120
203
|
throw new TypeError("invalid broker frame");
|
|
121
|
-
const fields = ["version", "kind", "requestId", "turnId", "code", ...accounting, ...(input.diagnostic === undefined ? [] : ["diagnostic"]), ...(input.mcpCalls === undefined ? [] : ["mcpCalls"])];
|
|
204
|
+
const fields = ["version", "kind", "requestId", "turnId", "code", ...accounting, ...clockFields, ...(input.diagnostic === undefined ? [] : ["diagnostic"]), ...(input.mcpCalls === undefined ? [] : ["mcpCalls"])];
|
|
122
205
|
exact(input, fields);
|
|
123
206
|
const codes = expected === VERSION ? ENGINE_BROKER_FAILURE_CODES : ENGINE_BROKER_FAILURE_CODES.filter((code) => code !== "limit_exceeded");
|
|
124
207
|
if (!codes.includes(input.code))
|
|
@@ -142,7 +225,7 @@ function parseTerminal(input, expected) {
|
|
|
142
225
|
if ((input.code === "limit_exceeded") !== (accountingValue.limitReason !== "none"))
|
|
143
226
|
throw new TypeError("invalid broker frame");
|
|
144
227
|
const mcpCalls = input.mcpCalls === undefined ? undefined : parseMcpCallObservation(input.mcpCalls);
|
|
145
|
-
return { version: VERSION, ...base, ...(mcpCalls === undefined ? {} : { mcpCalls }), ...accountingValue };
|
|
228
|
+
return { version: VERSION, ...base, ...observation, ...(mcpCalls === undefined ? {} : { mcpCalls }), ...accountingValue };
|
|
146
229
|
}
|
|
147
230
|
/**
|
|
148
231
|
* Names and timings, bounded, and internally consistent: a report can never
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engineBrokerSealLedger.d.ts","sourceRoot":"","sources":["../../src/runtime/engineBrokerSealLedger.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AAG9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,eAAO,MAAM,wBAAwB,EAAG,8BAAuC,CAAC;AAEhF,iFAAiF;AACjF,eAAO,MAAM,gBAAgB;;;;;;CAMnB,CAAC;AAEX,qHAAqH;AACrH,eAAO,MAAM,wBAAwB,OAAQ,CAAC;AAE9C,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAIxF;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,GAAI,UAAU,4BAA4B,EAAE,OAAO,mBAAmB,KAAG,
|
|
1
|
+
{"version":3,"file":"engineBrokerSealLedger.d.ts","sourceRoot":"","sources":["../../src/runtime/engineBrokerSealLedger.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AAG9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,eAAO,MAAM,wBAAwB,EAAG,8BAAuC,CAAC;AAEhF,iFAAiF;AACjF,eAAO,MAAM,gBAAgB;;;;;;CAMnB,CAAC;AAEX,qHAAqH;AACrH,eAAO,MAAM,wBAAwB,OAAQ,CAAC;AAE9C,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAIxF;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,GAAI,UAAU,4BAA4B,EAAE,OAAO,mBAAmB,KAAG,MAkExG,CAAC"}
|
|
@@ -74,6 +74,15 @@ export const renderBrokerTurnSealLine = (terminal, entry) => `${JSON.stringify({
|
|
|
74
74
|
requests: terminal.requests,
|
|
75
75
|
model: terminal.model,
|
|
76
76
|
limit_reason: terminal.limitReason,
|
|
77
|
+
...(terminal.shellClock === undefined ? {} : { shell_clock: terminal.shellClock }),
|
|
78
|
+
...(terminal.providerClock === undefined ? {} : { provider_clock: {
|
|
79
|
+
requests: terminal.providerClock.requests,
|
|
80
|
+
linesRewritten: terminal.providerClock.linesRewritten,
|
|
81
|
+
requestsWithoutDateLine: terminal.providerClock.requestsWithoutDateLine,
|
|
82
|
+
...(terminal.providerClock.linesIgnored === undefined ? {} : { linesIgnored: terminal.providerClock.linesIgnored }),
|
|
83
|
+
injectedDate: terminal.providerClock.injectedDate,
|
|
84
|
+
taskDate: terminal.providerClock.taskDate
|
|
85
|
+
} }),
|
|
77
86
|
...(terminal.kind === "failed" ? { code: terminal.code } : {}),
|
|
78
87
|
...(terminal.kind === "failed" && terminal.diagnostic !== undefined
|
|
79
88
|
? {
|
|
@@ -1,12 +1,15 @@
|
|
|
1
|
+
import { type BrokerClockObservation } from "./grokBrokerTaskClock.js";
|
|
2
|
+
import { type Socket } from "node:net";
|
|
3
|
+
import { type EngineBrokerCleanupObservation } from "./engineBrokerProtocol.js";
|
|
1
4
|
import type { EngineBrokerTurnAccounting, EngineBrokerTurnLimitOverrides } from "./engineBrokerTurnAccounting.js";
|
|
2
5
|
import { type GrokInferenceGrantIssued, type GrokInferenceGrantRequest } from "./grokInferenceGrants.js";
|
|
3
6
|
export interface EngineBrokerServiceEngine {
|
|
4
|
-
turn(agentId: string, wakeId: string, prompt: string, mcpEndpoint: string, signal?: AbortSignal, limits?: EngineBrokerTurnLimitOverrides): Promise<Readonly<{
|
|
7
|
+
turn(agentId: string, wakeId: string, prompt: string, mcpEndpoint: string, signal?: AbortSignal, limits?: EngineBrokerTurnLimitOverrides, processClock?: string, slot?: number): Promise<Readonly<{
|
|
5
8
|
text: string;
|
|
6
9
|
workerPid: number;
|
|
7
10
|
workerUid: number;
|
|
8
11
|
workerStartTime: string;
|
|
9
|
-
}> & EngineBrokerTurnAccounting>;
|
|
12
|
+
}> & EngineBrokerTurnAccounting & BrokerClockObservation & EngineBrokerCleanupObservation>;
|
|
10
13
|
readiness(): Readonly<{
|
|
11
14
|
providerProxyPort: number;
|
|
12
15
|
mcpFacadePort: number;
|
|
@@ -16,6 +19,7 @@ export interface EngineBrokerServiceEngine {
|
|
|
16
19
|
workerIsolation: boolean;
|
|
17
20
|
}>;
|
|
18
21
|
close(): Promise<void>;
|
|
22
|
+
resetSlot?(slot: number): Promise<void>;
|
|
19
23
|
/** Evaluator inference grants; an engine without them refuses every grant request as `unavailable`. Refusals throw {@link GrokInferenceGrantRefused}. */
|
|
20
24
|
requestInferenceGrant?(request: GrokInferenceGrantRequest): GrokInferenceGrantIssued;
|
|
21
25
|
releaseInferenceGrant?(grantId: string): boolean;
|
|
@@ -34,4 +38,6 @@ export declare function startEngineBrokerServiceWithIdentity(broker: EngineBroke
|
|
|
34
38
|
socketPath: string;
|
|
35
39
|
};
|
|
36
40
|
}>;
|
|
41
|
+
/** @internal The production connection handler, also exercised over an in-memory transport. */
|
|
42
|
+
export declare function serveEngineBrokerConnection(socket: Socket, broker: EngineBrokerServiceEngine, active?: Map<string, AbortController>): void;
|
|
37
43
|
//# sourceMappingURL=engineBrokerService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engineBrokerService.d.ts","sourceRoot":"","sources":["../../src/runtime/engineBrokerService.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"engineBrokerService.d.ts","sourceRoot":"","sources":["../../src/runtime/engineBrokerService.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAE/F,OAAO,EAA6B,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC;AAClE,OAAO,EAEqB,KAAK,8BAA8B,EAC9D,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,0BAA0B,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AAGlH,OAAO,EAA6B,KAAK,wBAAwB,EAAE,KAAK,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACpI,MAAM,WAAW,yBAAyB;IACxC,IAAI,CACF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EACpE,MAAM,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,8BAA8B,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAClG,OAAO,CAAC,QAAQ,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;KAC7E,CAAC,GAAG,0BAA0B,GAAG,sBAAsB,GAAG,8BAA8B,CAAC,CAAC;IAC3F,SAAS,IAAG,QAAQ,CAAC;QAAC,iBAAiB,EAAC,MAAM,CAAC;QAAA,aAAa,EAAC,MAAM,CAAC;QAAA,aAAa,EAAC,MAAM,CAAC;QAAA,eAAe,EAAC,OAAO,CAAC;QAAA,UAAU,EAAC,OAAO,CAAC;QAAA,eAAe,EAAC,OAAO,CAAA;KAAC,CAAC,CAAC;IAC9J,KAAK,IAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,SAAS,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,yJAAyJ;IACzJ,qBAAqB,CAAC,CAAC,OAAO,EAAC,yBAAyB,GAAE,wBAAwB,CAAC;IACnF,qBAAqB,CAAC,CAAC,OAAO,EAAC,MAAM,GAAE,OAAO,CAAC;CAChD;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAC,yBAAyB,EAAC,UAAU,SAAyC;;;;;;GAE5H;AACD,wBAAsB,oCAAoC,CAAC,MAAM,EAAC,yBAAyB,EAAC,UAAU,EAAC,MAAM,EAAC,WAAW,EAAC,MAAM;;;;;;GAU/H;AAoBD,+FAA+F;AAC/F,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,yBAAyB,EAAE,MAAM,+BAAqC,GAC7F,IAAI,CA0EN"}
|