@noopolis/daimon 0.2.0 → 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 +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/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 +5 -0
- package/dist/runtime/engineBrokerServiceConfig.d.ts.map +1 -1
- package/dist/runtime/engineBrokerServiceConfig.js +47 -9
- 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 +9 -1
- package/dist/runtime/grokBrokerProjection.d.ts.map +1 -1
- package/dist/runtime/grokBrokerProjection.js +11 -4
- 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 +9 -4
- package/dist/runtime/grokWorkerAttestation.d.ts.map +1 -1
- package/dist/runtime/grokWorkerAttestation.js +2 -2
- package/dist/runtime/grokWorkerHomeAttestation.d.ts +4 -2
- package/dist/runtime/grokWorkerHomeAttestation.d.ts.map +1 -1
- package/dist/runtime/grokWorkerHomeAttestation.js +10 -4
- package/dist/runtime/index.d.ts +7 -2
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +5 -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,7 +1,9 @@
|
|
|
1
|
+
import { type Socket } from "node:net";
|
|
1
2
|
import type { EngineBrokerInferenceFailureCode, EngineBrokerInferenceResponse } from "./engineBrokerInferenceProtocol.js";
|
|
2
3
|
import type { EngineBrokerTurnLimitOverrides } from "./engineBrokerTurnAccounting.js";
|
|
3
4
|
import type { GrokBrokerModel, GrokBrokerReasoningEffort } from "./grokBrokerModelPolicy.js";
|
|
4
5
|
import type { GrokInferencePurpose } from "./inferenceUsageLedger.js";
|
|
6
|
+
import type { GrokBrokerProviderClockObservation } from "./grokBrokerProviderClock.js";
|
|
5
7
|
export type EngineBrokerInferenceGrant = Omit<Extract<EngineBrokerInferenceResponse, {
|
|
6
8
|
kind: "inference_grant";
|
|
7
9
|
}>, "version" | "kind" | "requestId">;
|
|
@@ -18,13 +20,21 @@ export declare class EngineBrokerInferenceGrantRefused extends Error {
|
|
|
18
20
|
export type EngineBrokerTurnOptions = Readonly<{
|
|
19
21
|
limits?: EngineBrokerTurnLimitOverrides;
|
|
20
22
|
model?: string;
|
|
23
|
+
processClock?: string;
|
|
24
|
+
slot?: number;
|
|
25
|
+
/** Sealed observation on completion, failure and replay; sink errors never change the turn. */
|
|
26
|
+
onProviderClock?: (observation: GrokBrokerProviderClockObservation) => void;
|
|
21
27
|
}>;
|
|
22
28
|
export interface EngineBrokerTurnClient {
|
|
23
29
|
turn(agentId: string, wakeId: string, prompt: string, mcpEndpoint: string, signal?: AbortSignal, options?: EngineBrokerTurnOptions): Promise<string>;
|
|
24
30
|
}
|
|
25
31
|
export declare class EngineBrokerControlClient implements EngineBrokerTurnClient {
|
|
26
32
|
private readonly socketPath;
|
|
27
|
-
|
|
33
|
+
/** Internal transport seam; the production client always opens the Unix socket. */
|
|
34
|
+
private readonly connect;
|
|
35
|
+
constructor(socketPath?: string,
|
|
36
|
+
/** Internal transport seam; the production client always opens the Unix socket. */
|
|
37
|
+
connect?: (path: string) => Socket);
|
|
28
38
|
ready(): Promise<void>;
|
|
29
39
|
/**
|
|
30
40
|
* Evaluator side (organization uid only; the native relay enforces it):
|
|
@@ -38,6 +48,7 @@ export declare class EngineBrokerControlClient implements EngineBrokerTurnClient
|
|
|
38
48
|
purpose: GrokInferencePurpose;
|
|
39
49
|
}>): Promise<EngineBrokerInferenceGrant>;
|
|
40
50
|
releaseInferenceGrant(grantId: string): Promise<boolean>;
|
|
51
|
+
resetSlot(slot: number): Promise<void>;
|
|
41
52
|
private exchange;
|
|
42
53
|
turn(agentId: string, wakeId: string, prompt: string, mcpEndpoint: string, signal?: AbortSignal, options?: EngineBrokerTurnOptions): Promise<string>;
|
|
43
54
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engineBrokerControlClient.d.ts","sourceRoot":"","sources":["../../src/runtime/engineBrokerControlClient.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"engineBrokerControlClient.d.ts","sourceRoot":"","sources":["../../src/runtime/engineBrokerControlClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC;AAEzD,OAAO,KAAK,EAAE,gCAAgC,EAAgC,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAExJ,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,KAAK,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAC7F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,8BAA8B,CAAC;AAevF,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAAC,OAAO,CAAC,6BAA6B,EAAE;IAAE,IAAI,EAAE,iBAAiB,CAAA;CAAE,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,WAAW,CAAC,CAAC;AACrJ,4HAA4H;AAC5H,qBAAa,iCAAkC,SAAQ,KAAK;IAC9C,QAAQ,CAAC,IAAI,EAAE,gCAAgC;gBAAtC,IAAI,EAAE,gCAAgC;CAC5D;AAED;;;;GAIG;AACH,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC;IAC7C,MAAM,CAAC,EAAE,8BAA8B,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAC9F,+FAA+F;IAC/F,eAAe,CAAC,EAAE,CAAC,WAAW,EAAE,kCAAkC,KAAK,IAAI,CAAC;CAC7E,CAAC,CAAC;AACH,MAAM,WAAW,sBAAsB;IAAG,IAAI,CAAC,OAAO,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,WAAW,EAAC,MAAM,EAAC,MAAM,CAAC,EAAC,WAAW,EAAC,OAAO,CAAC,EAAC,uBAAuB,GAAE,OAAO,CAAC,MAAM,CAAC,CAAC;CAAE;AACrL,qBAAa,yBAA0B,YAAW,sBAAsB;IAEpE,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,mFAAmF;IACnF,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAFP,UAAU,SAA2C;IACtE,mFAAmF;IAClE,OAAO,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAA6C;IAErF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA8B5B;;;;;OAKG;IACG,qBAAqB,CAAC,OAAO,EAAC,QAAQ,CAAC;QAAC,KAAK,EAAC,eAAe,CAAC;QAAA,eAAe,EAAC,yBAAyB,CAAC;QAAA,OAAO,EAAC,oBAAoB,CAAA;KAAC,CAAC,GAAE,OAAO,CAAC,0BAA0B,CAAC;IAM3K,qBAAqB,CAAC,OAAO,EAAC,MAAM,GAAE,OAAO,CAAC,OAAO,CAAC;IAMtD,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,OAAO,CAAC,QAAQ;IA6BV,IAAI,CACR,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EACpE,MAAM,CAAC,EAAE,WAAW,EAAE,OAAO,GAAE,uBAA4B,GAC1D,OAAO,CAAC,MAAM,CAAC;CA+EnB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createHash, randomUUID } from "node:crypto";
|
|
2
2
|
import { createConnection } from "node:net";
|
|
3
|
-
import { ENGINE_BROKER_VERSION, encodeEngineBrokerFrame, EngineBrokerFrameDecoder, parseEngineBrokerResponse } from "./engineBrokerProtocol.js";
|
|
3
|
+
import { ENGINE_BROKER_VERSION, EngineBrokerProtocolMismatch, encodeEngineBrokerFrame, EngineBrokerFrameDecoder, parseEngineBrokerResponse, parseEngineBrokerSlot } from "./engineBrokerProtocol.js";
|
|
4
4
|
import { ENGINE_BROKER_MCP_REFUSAL_REASONS } from "./engineBrokerMcpCallLog.js";
|
|
5
5
|
/**
|
|
6
6
|
* What the broker saw of the worker's MCP tool calls on a failed turn
|
|
@@ -25,23 +25,48 @@ export class EngineBrokerInferenceGrantRefused extends Error {
|
|
|
25
25
|
}
|
|
26
26
|
export class EngineBrokerControlClient {
|
|
27
27
|
socketPath;
|
|
28
|
-
|
|
28
|
+
connect;
|
|
29
|
+
constructor(socketPath = "/run/daimon-engine-broker/control.sock",
|
|
30
|
+
/** Internal transport seam; the production client always opens the Unix socket. */
|
|
31
|
+
connect = (path) => createConnection({ path })) {
|
|
29
32
|
this.socketPath = socketPath;
|
|
33
|
+
this.connect = connect;
|
|
30
34
|
}
|
|
31
|
-
async ready() {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
35
|
+
async ready() {
|
|
36
|
+
const requestId = randomUUID();
|
|
37
|
+
const socket = this.connect(this.socketPath);
|
|
38
|
+
const decoder = new EngineBrokerFrameDecoder();
|
|
39
|
+
await new Promise((resolve, reject) => {
|
|
40
|
+
let settled = false;
|
|
41
|
+
const fail = (error) => {
|
|
42
|
+
if (settled)
|
|
43
|
+
return;
|
|
44
|
+
settled = true;
|
|
45
|
+
socket.destroy();
|
|
46
|
+
reject(controlFailure(error));
|
|
47
|
+
};
|
|
48
|
+
socket.once("error", fail);
|
|
49
|
+
socket.once("close", fail);
|
|
50
|
+
socket.once("connect", () => socket.write(encodeEngineBrokerFrame({
|
|
51
|
+
version: ENGINE_BROKER_VERSION, kind: "health", requestId
|
|
52
|
+
})));
|
|
53
|
+
socket.on("data", (chunk) => {
|
|
54
|
+
try {
|
|
55
|
+
for (const value of decoder.push(chunk)) {
|
|
56
|
+
const response = parseEngineBrokerResponse(value);
|
|
57
|
+
if (response.kind !== "ready" || response.requestId !== requestId || settled)
|
|
58
|
+
throw new Error();
|
|
59
|
+
settled = true;
|
|
60
|
+
socket.destroy();
|
|
61
|
+
resolve();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
fail(error);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
});
|
|
41
69
|
}
|
|
42
|
-
catch {
|
|
43
|
-
fail();
|
|
44
|
-
} }); }); }
|
|
45
70
|
/**
|
|
46
71
|
* Evaluator side (organization uid only; the native relay enforces it):
|
|
47
72
|
* borrow the broker credential for one sequential lane of judge or optimizer
|
|
@@ -53,7 +78,7 @@ export class EngineBrokerControlClient {
|
|
|
53
78
|
if (response.kind === "inference_grant_refused")
|
|
54
79
|
throw new EngineBrokerInferenceGrantRefused(response.code);
|
|
55
80
|
if (response.kind !== "inference_grant" || response.model !== request.model || response.reasoningEffort !== request.reasoningEffort || response.purpose !== request.purpose)
|
|
56
|
-
throw new Error(
|
|
81
|
+
throw new Error(`engine broker unavailable (requires control protocol ${ENGINE_BROKER_VERSION})`);
|
|
57
82
|
const { version: _version, kind: _kind, requestId: _requestId, ...grant } = response;
|
|
58
83
|
return grant;
|
|
59
84
|
}
|
|
@@ -62,33 +87,77 @@ export class EngineBrokerControlClient {
|
|
|
62
87
|
if (response.kind === "inference_grant_refused")
|
|
63
88
|
throw new EngineBrokerInferenceGrantRefused(response.code);
|
|
64
89
|
if (response.kind !== "inference_grant_released" || response.grantId !== grantId)
|
|
65
|
-
throw new Error(
|
|
90
|
+
throw new Error(`engine broker unavailable (requires control protocol ${ENGINE_BROKER_VERSION})`);
|
|
66
91
|
return response.released;
|
|
67
92
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
93
|
+
async resetSlot(slot) {
|
|
94
|
+
const response = await this.exchange({ version: ENGINE_BROKER_VERSION, kind: "reset_slot", requestId: randomUUID(), slot: parseEngineBrokerSlot(slot) });
|
|
95
|
+
if (response.kind !== "slot_reset" || response.slot !== slot)
|
|
96
|
+
throw new Error("engine broker reset unavailable");
|
|
97
|
+
}
|
|
98
|
+
exchange(request) {
|
|
99
|
+
const socket = this.connect(this.socketPath);
|
|
100
|
+
const decoder = new EngineBrokerFrameDecoder();
|
|
101
|
+
return new Promise((resolve, reject) => {
|
|
102
|
+
let settled = false;
|
|
103
|
+
const fail = (error) => {
|
|
104
|
+
if (settled)
|
|
105
|
+
return;
|
|
106
|
+
settled = true;
|
|
107
|
+
socket.destroy();
|
|
108
|
+
reject(controlFailure(error));
|
|
109
|
+
};
|
|
110
|
+
socket.once("error", fail);
|
|
111
|
+
socket.once("close", fail);
|
|
112
|
+
socket.once("connect", () => socket.write(encodeEngineBrokerFrame(request)));
|
|
113
|
+
socket.on("data", (chunk) => {
|
|
114
|
+
try {
|
|
115
|
+
for (const value of decoder.push(chunk)) {
|
|
116
|
+
const response = parseEngineBrokerResponse(value);
|
|
117
|
+
if (settled || response.requestId !== request.requestId ||
|
|
118
|
+
(response.kind !== "inference_grant" && response.kind !== "inference_grant_released" &&
|
|
119
|
+
response.kind !== "inference_grant_refused" && response.kind !== "slot_reset"))
|
|
120
|
+
throw new Error();
|
|
121
|
+
settled = true;
|
|
122
|
+
socket.destroy();
|
|
123
|
+
resolve(response);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
fail(error);
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
});
|
|
78
131
|
}
|
|
79
|
-
catch {
|
|
80
|
-
fail();
|
|
81
|
-
} }); }); }
|
|
82
132
|
async turn(agentId, wakeId, prompt, mcpEndpoint, signal, options = {}) {
|
|
83
|
-
const
|
|
84
|
-
const
|
|
85
|
-
|
|
133
|
+
const configured = process.env.DAIMON_ENGINE_BROKER_SLOT;
|
|
134
|
+
const slot = options.slot ?? (configured === undefined ? undefined : parseEngineBrokerSlot(/^(0|[1-9][0-9]*)$/u.test(configured) ? Number(configured) : NaN));
|
|
135
|
+
if (slot !== undefined)
|
|
136
|
+
parseEngineBrokerSlot(slot);
|
|
137
|
+
const turnId = createHash("sha256").update(`${slot === undefined ? "" : `${slot}\0`}${agentId}\0${wakeId}`).digest("hex");
|
|
138
|
+
const requestId = randomUUID();
|
|
139
|
+
const request = {
|
|
140
|
+
version: ENGINE_BROKER_VERSION, kind: "start_turn", requestId, turnId, agentId, wakeId, prompt, mcpEndpoint,
|
|
141
|
+
...(slot === undefined ? {} : { slot }),
|
|
142
|
+
...(options.limits === undefined ? {} : { limits: options.limits }),
|
|
143
|
+
...(options.processClock === undefined ? {} : { processClock: options.processClock })
|
|
144
|
+
};
|
|
145
|
+
const socket = this.connect(this.socketPath);
|
|
86
146
|
const decoder = new EngineBrokerFrameDecoder();
|
|
87
147
|
return new Promise((resolve, reject) => {
|
|
88
|
-
let accepted = false
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
148
|
+
let accepted = false;
|
|
149
|
+
let settled = false;
|
|
150
|
+
const fail = (error) => {
|
|
151
|
+
if (settled)
|
|
152
|
+
return;
|
|
153
|
+
settled = true;
|
|
154
|
+
cleanup();
|
|
155
|
+
reject(controlFailure(error));
|
|
156
|
+
};
|
|
157
|
+
const cleanup = () => {
|
|
158
|
+
signal?.removeEventListener("abort", abort);
|
|
159
|
+
socket.destroy();
|
|
160
|
+
};
|
|
92
161
|
const abort = () => fail();
|
|
93
162
|
signal?.addEventListener("abort", abort, { once: true });
|
|
94
163
|
if (signal?.aborted)
|
|
@@ -98,7 +167,8 @@ export class EngineBrokerControlClient {
|
|
|
98
167
|
try {
|
|
99
168
|
for (const value of decoder.push(chunk)) {
|
|
100
169
|
const response = parseEngineBrokerResponse(value);
|
|
101
|
-
if ((response.kind !== "accepted" && response.kind !== "completed" && response.kind !== "failed") ||
|
|
170
|
+
if ((response.kind !== "accepted" && response.kind !== "completed" && response.kind !== "failed") ||
|
|
171
|
+
response.requestId !== requestId || response.turnId !== turnId)
|
|
102
172
|
throw new Error();
|
|
103
173
|
if (response.kind === "accepted") {
|
|
104
174
|
if (accepted)
|
|
@@ -110,18 +180,40 @@ export class EngineBrokerControlClient {
|
|
|
110
180
|
throw new Error();
|
|
111
181
|
settled = true;
|
|
112
182
|
cleanup();
|
|
183
|
+
if (response.providerClock !== undefined) {
|
|
184
|
+
try {
|
|
185
|
+
options.onProviderClock?.(response.providerClock);
|
|
186
|
+
}
|
|
187
|
+
catch { /* Observation cannot discard a terminal result. */ }
|
|
188
|
+
}
|
|
113
189
|
if (options.model !== undefined && response.model !== options.model) {
|
|
114
190
|
reject(new Error(`engine broker turn used model ${response.model}, not the declared ${options.model}`));
|
|
115
191
|
return;
|
|
116
192
|
}
|
|
117
|
-
if (response.kind === "completed")
|
|
193
|
+
if (response.kind === "completed") {
|
|
194
|
+
if (response.cleanupDiagnostic !== undefined) {
|
|
195
|
+
try {
|
|
196
|
+
console.warn(`daimon: engine broker ${response.cleanupDiagnostic}`);
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
// An operational warning must not discard completed work.
|
|
200
|
+
}
|
|
201
|
+
}
|
|
118
202
|
resolve(response.text);
|
|
119
|
-
|
|
120
|
-
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
const limit = response.limitReason === "none" ? "" : `; limit=${response.limitReason}`;
|
|
206
|
+
const detail = response.diagnostic;
|
|
207
|
+
const reason = detail?.reason === undefined ? "" : `; reason=${detail.reason}`;
|
|
208
|
+
const diagnostic = detail === undefined ? "" :
|
|
209
|
+
`; ${detail.stage}/${detail.failureClass}; exit=${detail.exitCode}; signal=${detail.termSignal}${reason}`;
|
|
210
|
+
const cleanupDiagnostic = response.cleanupDiagnostic === undefined ? "" : `; ${response.cleanupDiagnostic}`;
|
|
211
|
+
reject(new Error(`engine broker turn failed (${response.code}${limit}${diagnostic}${renderMcpCalls(response.mcpCalls)}${cleanupDiagnostic})`));
|
|
212
|
+
}
|
|
121
213
|
}
|
|
122
214
|
}
|
|
123
|
-
catch {
|
|
124
|
-
fail();
|
|
215
|
+
catch (error) {
|
|
216
|
+
fail(error);
|
|
125
217
|
}
|
|
126
218
|
});
|
|
127
219
|
socket.once("error", fail);
|
|
@@ -130,3 +222,7 @@ export class EngineBrokerControlClient {
|
|
|
130
222
|
});
|
|
131
223
|
}
|
|
132
224
|
}
|
|
225
|
+
function controlFailure(error) {
|
|
226
|
+
return error instanceof EngineBrokerProtocolMismatch ? error :
|
|
227
|
+
new Error(`engine broker unavailable (requires control protocol ${ENGINE_BROKER_VERSION})`);
|
|
228
|
+
}
|
|
@@ -4,7 +4,9 @@ export type BrokerCredentialJournal = Readonly<{
|
|
|
4
4
|
generation: number;
|
|
5
5
|
sourceDigest: string;
|
|
6
6
|
promotedDigest?: string;
|
|
7
|
+
ancestorDigests?: readonly string[];
|
|
7
8
|
}>;
|
|
9
|
+
export declare const BROKER_CREDENTIAL_MAX_ANCESTORS = 900;
|
|
8
10
|
export declare function parseBrokerCredentialJournal(value: unknown): BrokerCredentialJournal;
|
|
9
11
|
export declare function recoverBrokerCredentialJournal(journal: BrokerCredentialJournal, authorityDigest: string): "ready" | "stale";
|
|
10
12
|
//# sourceMappingURL=engineBrokerCredentialJournal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engineBrokerCredentialJournal.d.ts","sourceRoot":"","sources":["../../src/runtime/engineBrokerCredentialJournal.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC;IAAE,OAAO,EAAE,8CAA8C,CAAC;IAAC,KAAK,EAAE,YAAY,GAAG,UAAU,GAAG,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"engineBrokerCredentialJournal.d.ts","sourceRoot":"","sources":["../../src/runtime/engineBrokerCredentialJournal.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC;IAAE,OAAO,EAAE,8CAA8C,CAAC;IAAC,KAAK,EAAE,YAAY,GAAG,UAAU,GAAG,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC,CAAC;AAEhQ,eAAO,MAAM,+BAA+B,MAAM,CAAC;AAGnD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,uBAAuB,CAWpF;AAED,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAI3H"}
|
|
@@ -1,9 +1,18 @@
|
|
|
1
|
+
// At most 61 KiB including the rest of the record; all readers allow 64 KiB.
|
|
2
|
+
export const BROKER_CREDENTIAL_MAX_ANCESTORS = 900;
|
|
1
3
|
const DIGEST = /^[a-f0-9]{64}$/u;
|
|
2
4
|
export function parseBrokerCredentialJournal(value) {
|
|
3
5
|
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
4
6
|
throw new TypeError("invalid credential journal");
|
|
5
7
|
const input = value;
|
|
6
8
|
const fields = input.state === "refreshing" ? ["version", "state", "generation", "sourceDigest"] : ["version", "state", "generation", "sourceDigest", "promotedDigest"];
|
|
9
|
+
if (Object.hasOwn(input, "ancestorDigests")) {
|
|
10
|
+
fields.push("ancestorDigests");
|
|
11
|
+
if (!Array.isArray(input.ancestorDigests) || input.ancestorDigests.length > BROKER_CREDENTIAL_MAX_ANCESTORS ||
|
|
12
|
+
input.ancestorDigests.some((entry) => typeof entry !== "string" || !DIGEST.test(entry)) ||
|
|
13
|
+
new Set(input.ancestorDigests).size !== input.ancestorDigests.length)
|
|
14
|
+
throw new TypeError("invalid credential journal");
|
|
15
|
+
}
|
|
7
16
|
if (Object.keys(input).length !== fields.length || fields.some((key) => !Object.hasOwn(input, key)) || input.version !== "noopolis.daimon.broker-credential-journal.v1" || !["refreshing", "promoted", "stale"].includes(String(input.state)) || !Number.isSafeInteger(input.generation) || input.generation < 0 || !DIGEST.test(String(input.sourceDigest)) || (input.state !== "refreshing" && !DIGEST.test(String(input.promotedDigest))))
|
|
8
17
|
throw new TypeError("invalid credential journal");
|
|
9
18
|
return input;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import { GROK_ENGINE_BROKER } from "../contracts/runtimeContractManifest.js";
|
|
1
2
|
import type { EngineBrokerTurnLimits } from "./engineBrokerTurnAccounting.js";
|
|
2
3
|
import type { GrokBrokerModel, GrokBrokerReasoningEffort } from "./grokBrokerModelPolicy.js";
|
|
3
4
|
import type { GrokInferencePurpose } from "./inferenceUsageLedger.js";
|
|
4
5
|
export declare const ENGINE_BROKER_INFERENCE_FAILURE_CODES: readonly ["auth_stale", "grant_limit", "invalid_request", "unavailable"];
|
|
5
6
|
export type EngineBrokerInferenceFailureCode = (typeof ENGINE_BROKER_INFERENCE_FAILURE_CODES)[number];
|
|
6
7
|
export declare const GROK_INFERENCE_PROXY_BASE_URL: "http://127.0.0.1:43123/v1";
|
|
7
|
-
type V =
|
|
8
|
+
type V = typeof GROK_ENGINE_BROKER.controlProtocolVersion;
|
|
8
9
|
export type EngineBrokerInferenceRequest = Readonly<{
|
|
9
10
|
version: V;
|
|
10
11
|
kind: "request_inference_grant";
|
|
@@ -43,7 +44,7 @@ export type EngineBrokerInferenceResponse = Readonly<{
|
|
|
43
44
|
code: EngineBrokerInferenceFailureCode;
|
|
44
45
|
}>;
|
|
45
46
|
type JsonRecord = Record<string, unknown>;
|
|
46
|
-
/** `input` has already passed the
|
|
47
|
+
/** `input` has already passed the current envelope checks; `requestId` is the parsed id. */
|
|
47
48
|
export declare function parseEngineBrokerInferenceRequest(input: JsonRecord, requestId: string, version: V): EngineBrokerInferenceRequest;
|
|
48
49
|
export declare function parseEngineBrokerInferenceResponse(input: JsonRecord, requestId: string, version: V): EngineBrokerInferenceResponse;
|
|
49
50
|
export declare const isEngineBrokerInferenceRequestKind: (kind: unknown) => boolean;
|
|
@@ -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":"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;AAW/E,yHAAyH;AACzH,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAG7F,qBAAa,sBAAsB;IAErB,OAAO,CAAC,QAAQ,CAAC,GAAG;IADhC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA8B;gBACvB,GAAG,GAAE,MAAM,MAAiB;IAEzD,8FAA8F;IAC9F,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAC1B,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAE3B,qGAAqG;IACrG,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,yBAAyB;IAiC9E;;;;OAIG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,2BAA2B;IAavD;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,4BAA4B,GAAG,IAAI;IAElE,yGAAyG;IACzG,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAEjC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,uBAAuB,GAAG,SAAS;IAK7D,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,8BAA8B,GAAG,SAAS;CAmBpE"}
|
|
@@ -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)
|