@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.
Files changed (255) hide show
  1. package/README.md +6 -0
  2. package/dist/contracts/attentionContract.d.ts +25 -0
  3. package/dist/contracts/attentionContract.d.ts.map +1 -1
  4. package/dist/contracts/attentionContract.js +8 -1
  5. package/dist/contracts/grokBrokerTaskClock.d.ts +18 -0
  6. package/dist/contracts/grokBrokerTaskClock.d.ts.map +1 -0
  7. package/dist/contracts/grokBrokerTaskClock.js +16 -0
  8. package/dist/contracts/organizationRuntimeContract.d.ts +76 -0
  9. package/dist/contracts/organizationRuntimeContract.d.ts.map +1 -1
  10. package/dist/contracts/organizationRuntimeContract.js +2 -0
  11. package/dist/contracts/runtimeContractManifest.d.ts +222 -15
  12. package/dist/contracts/runtimeContractManifest.d.ts.map +1 -1
  13. package/dist/contracts/runtimeContractManifest.js +35 -10
  14. package/dist/contracts/shellEnvironmentPolicy.d.ts +3 -0
  15. package/dist/contracts/shellEnvironmentPolicy.d.ts.map +1 -0
  16. package/dist/contracts/shellEnvironmentPolicy.js +5 -0
  17. package/dist/contracts/wakeMomentContract.d.ts +61 -0
  18. package/dist/contracts/wakeMomentContract.d.ts.map +1 -0
  19. package/dist/contracts/wakeMomentContract.js +27 -0
  20. package/dist/core/types.d.ts +2 -0
  21. package/dist/core/types.d.ts.map +1 -1
  22. package/dist/examples/jungianPlayAgent.d.ts +1 -0
  23. package/dist/examples/jungianPlayAgent.d.ts.map +1 -1
  24. package/dist/examples/jungianPlayAgent.js +6 -2
  25. package/dist/observability/causalEvents.d.ts +3 -3
  26. package/dist/observability/causalEvents.d.ts.map +1 -1
  27. package/dist/observability/causalEvents.js +4 -4
  28. package/dist/pi/cliEngineSpawn.d.ts +2 -2
  29. package/dist/pi/cliEngineSpawn.d.ts.map +1 -1
  30. package/dist/pi/cliEngineSpawn.js +7 -2
  31. package/dist/pi/cliEnvironment.d.ts.map +1 -1
  32. package/dist/pi/cliEnvironment.js +2 -0
  33. package/dist/pi/cliMcpRegistration.d.ts +1 -1
  34. package/dist/pi/cliMcpRegistration.d.ts.map +1 -1
  35. package/dist/pi/cliMcpRegistration.js +1 -1
  36. package/dist/pi/cliSession.d.ts +2 -0
  37. package/dist/pi/cliSession.d.ts.map +1 -1
  38. package/dist/pi/cliSession.js +3 -80
  39. package/dist/pi/cliSessionMcp.d.ts +9 -0
  40. package/dist/pi/cliSessionMcp.d.ts.map +1 -0
  41. package/dist/pi/cliSessionMcp.js +80 -0
  42. package/dist/pi/engineTaskClock.d.ts +9 -0
  43. package/dist/pi/engineTaskClock.d.ts.map +1 -0
  44. package/dist/pi/engineTaskClock.js +28 -0
  45. package/dist/pi/grokHomeMcpRegistration.d.ts.map +1 -1
  46. package/dist/pi/grokHomeMcpRegistration.js +2 -1
  47. package/dist/pi/grokSandbox.js +1 -1
  48. package/dist/pi/memoryClock.d.ts +25 -0
  49. package/dist/pi/memoryClock.d.ts.map +1 -0
  50. package/dist/pi/memoryClock.js +18 -0
  51. package/dist/pi/piAgentHandle.d.ts +3 -1
  52. package/dist/pi/piAgentHandle.d.ts.map +1 -1
  53. package/dist/pi/piAgentHandle.js +5 -2
  54. package/dist/pi/piHarness.d.ts +8 -2
  55. package/dist/pi/piHarness.d.ts.map +1 -1
  56. package/dist/pi/piHarness.js +28 -12
  57. package/dist/pi/taskClockProcess.d.ts +6 -0
  58. package/dist/pi/taskClockProcess.d.ts.map +1 -0
  59. package/dist/pi/taskClockProcess.js +8 -0
  60. package/dist/pi/turnCausal.d.ts +4 -2
  61. package/dist/pi/turnCausal.d.ts.map +1 -1
  62. package/dist/pi/turnCausal.js +4 -4
  63. package/dist/pi/wakeAcceptance.d.ts +1 -1
  64. package/dist/pi/wakeAcceptance.d.ts.map +1 -1
  65. package/dist/pi/wakeAcceptance.js +2 -2
  66. package/dist/runtime/agySubscriptionBootstrap.js +1 -1
  67. package/dist/runtime/agySubscriptionRealm.js +1 -1
  68. package/dist/runtime/attention.d.ts +5 -0
  69. package/dist/runtime/attention.d.ts.map +1 -1
  70. package/dist/runtime/attention.js +14 -1
  71. package/dist/runtime/attentionDispatcher.d.ts +14 -2
  72. package/dist/runtime/attentionDispatcher.d.ts.map +1 -1
  73. package/dist/runtime/attentionDispatcher.js +127 -33
  74. package/dist/runtime/cli.js +5 -0
  75. package/dist/runtime/contract-manifest.json +1 -1
  76. package/dist/runtime/contract-manifest.sha256 +1 -1
  77. package/dist/runtime/engineBrokerCapabilities.d.ts +10 -0
  78. package/dist/runtime/engineBrokerCapabilities.d.ts.map +1 -1
  79. package/dist/runtime/engineBrokerCapabilities.js +10 -0
  80. package/dist/runtime/engineBrokerControlClient.d.ts +12 -1
  81. package/dist/runtime/engineBrokerControlClient.d.ts.map +1 -1
  82. package/dist/runtime/engineBrokerControlClient.js +139 -43
  83. package/dist/runtime/engineBrokerCredentialJournal.d.ts +2 -0
  84. package/dist/runtime/engineBrokerCredentialJournal.d.ts.map +1 -1
  85. package/dist/runtime/engineBrokerCredentialJournal.js +9 -0
  86. package/dist/runtime/engineBrokerInferenceProtocol.d.ts +3 -2
  87. package/dist/runtime/engineBrokerInferenceProtocol.d.ts.map +1 -1
  88. package/dist/runtime/engineBrokerInferenceProtocol.js +4 -4
  89. package/dist/runtime/engineBrokerMcpCallLog.d.ts +11 -0
  90. package/dist/runtime/engineBrokerMcpCallLog.d.ts.map +1 -1
  91. package/dist/runtime/engineBrokerMcpCallLog.js +13 -1
  92. package/dist/runtime/engineBrokerMcpFacade.d.ts +5 -2
  93. package/dist/runtime/engineBrokerMcpFacade.d.ts.map +1 -1
  94. package/dist/runtime/engineBrokerMcpFacade.js +5 -2
  95. package/dist/runtime/engineBrokerNativeClient.js +2 -2
  96. package/dist/runtime/engineBrokerProtocol.d.ts +42 -10
  97. package/dist/runtime/engineBrokerProtocol.d.ts.map +1 -1
  98. package/dist/runtime/engineBrokerProtocol.js +97 -14
  99. package/dist/runtime/engineBrokerSealLedger.d.ts.map +1 -1
  100. package/dist/runtime/engineBrokerSealLedger.js +9 -0
  101. package/dist/runtime/engineBrokerService.d.ts +8 -2
  102. package/dist/runtime/engineBrokerService.d.ts.map +1 -1
  103. package/dist/runtime/engineBrokerService.js +95 -37
  104. package/dist/runtime/engineBrokerServiceCli.js +1 -1
  105. package/dist/runtime/engineBrokerServiceConfig.d.ts +5 -0
  106. package/dist/runtime/engineBrokerServiceConfig.d.ts.map +1 -1
  107. package/dist/runtime/engineBrokerServiceConfig.js +47 -9
  108. package/dist/runtime/engineBrokerTurnRegistry.d.ts +1 -1
  109. package/dist/runtime/engineBrokerTurnRegistry.d.ts.map +1 -1
  110. package/dist/runtime/engineBrokerTurnRegistry.js +7 -6
  111. package/dist/runtime/engineDispatcher.d.ts +2 -0
  112. package/dist/runtime/engineDispatcher.d.ts.map +1 -1
  113. package/dist/runtime/engineDispatcher.js +14 -2
  114. package/dist/runtime/engineReadiness.js +1 -1
  115. package/dist/runtime/grokBrokerCredentialAuthority.d.ts +1 -0
  116. package/dist/runtime/grokBrokerCredentialAuthority.d.ts.map +1 -1
  117. package/dist/runtime/grokBrokerCredentialAuthority.js +48 -22
  118. package/dist/runtime/grokBrokerCredentialReader.d.ts +1 -0
  119. package/dist/runtime/grokBrokerCredentialReader.d.ts.map +1 -1
  120. package/dist/runtime/grokBrokerCredentialReader.js +2 -1
  121. package/dist/runtime/grokBrokerProjection.d.ts +9 -1
  122. package/dist/runtime/grokBrokerProjection.d.ts.map +1 -1
  123. package/dist/runtime/grokBrokerProjection.js +11 -4
  124. package/dist/runtime/grokBrokerProviderClock.d.ts +26 -0
  125. package/dist/runtime/grokBrokerProviderClock.d.ts.map +1 -0
  126. package/dist/runtime/grokBrokerProviderClock.js +133 -0
  127. package/dist/runtime/grokBrokerProxy.d.ts +17 -3
  128. package/dist/runtime/grokBrokerProxy.d.ts.map +1 -1
  129. package/dist/runtime/grokBrokerProxy.js +73 -9
  130. package/dist/runtime/grokBrokerProxyJson.d.ts +10 -0
  131. package/dist/runtime/grokBrokerProxyJson.d.ts.map +1 -0
  132. package/dist/runtime/grokBrokerProxyJson.js +31 -0
  133. package/dist/runtime/grokBrokerProxyRequest.d.ts.map +1 -1
  134. package/dist/runtime/grokBrokerProxyRequest.js +17 -6
  135. package/dist/runtime/grokBrokerRealmLease.js +1 -1
  136. package/dist/runtime/grokBrokerRefresh.js +1 -1
  137. package/dist/runtime/grokBrokerRunBudget.d.ts +20 -0
  138. package/dist/runtime/grokBrokerRunBudget.d.ts.map +1 -0
  139. package/dist/runtime/grokBrokerRunBudget.js +85 -0
  140. package/dist/runtime/grokBrokerSlot.d.ts +6 -0
  141. package/dist/runtime/grokBrokerSlot.d.ts.map +1 -0
  142. package/dist/runtime/grokBrokerSlot.js +21 -0
  143. package/dist/runtime/grokBrokerTaskClock.d.ts +32 -0
  144. package/dist/runtime/grokBrokerTaskClock.d.ts.map +1 -0
  145. package/dist/runtime/grokBrokerTaskClock.js +120 -0
  146. package/dist/runtime/grokBrokerTurnMeter.d.ts +55 -3
  147. package/dist/runtime/grokBrokerTurnMeter.d.ts.map +1 -1
  148. package/dist/runtime/grokBrokerTurnMeter.js +90 -4
  149. package/dist/runtime/grokBrokerWorkerConfig.d.ts +5 -2
  150. package/dist/runtime/grokBrokerWorkerConfig.d.ts.map +1 -1
  151. package/dist/runtime/grokBrokerWorkerConfig.js +22 -3
  152. package/dist/runtime/grokEngineBroker.d.ts +43 -3
  153. package/dist/runtime/grokEngineBroker.d.ts.map +1 -1
  154. package/dist/runtime/grokEngineBroker.js +159 -71
  155. package/dist/runtime/grokEngineBrokerTurn.d.ts +32 -8
  156. package/dist/runtime/grokEngineBrokerTurn.d.ts.map +1 -1
  157. package/dist/runtime/grokEngineBrokerTurn.js +204 -21
  158. package/dist/runtime/grokEngineBrokerTurnEnd.d.ts +88 -0
  159. package/dist/runtime/grokEngineBrokerTurnEnd.d.ts.map +1 -0
  160. package/dist/runtime/grokEngineBrokerTurnEnd.js +148 -0
  161. package/dist/runtime/grokInferenceProxy.d.ts.map +1 -1
  162. package/dist/runtime/grokInferenceProxy.js +3 -0
  163. package/dist/runtime/grokSubscriptionRealm.js +1 -1
  164. package/dist/runtime/grokWorkerAttestation.d.ts +9 -4
  165. package/dist/runtime/grokWorkerAttestation.d.ts.map +1 -1
  166. package/dist/runtime/grokWorkerAttestation.js +2 -2
  167. package/dist/runtime/grokWorkerHomeAttestation.d.ts +4 -2
  168. package/dist/runtime/grokWorkerHomeAttestation.d.ts.map +1 -1
  169. package/dist/runtime/grokWorkerHomeAttestation.js +10 -4
  170. package/dist/runtime/index.d.ts +7 -2
  171. package/dist/runtime/index.d.ts.map +1 -1
  172. package/dist/runtime/index.js +5 -1
  173. package/dist/runtime/native/daimon-engine-broker +0 -0
  174. package/dist/runtime/organizationRuntime.d.ts +3 -0
  175. package/dist/runtime/organizationRuntime.d.ts.map +1 -1
  176. package/dist/runtime/organizationRuntimeAdmission.d.ts +6 -0
  177. package/dist/runtime/organizationRuntimeAdmission.d.ts.map +1 -0
  178. package/dist/runtime/organizationRuntimeAdmission.js +22 -0
  179. package/dist/runtime/organizationRuntimeControl.d.ts +9 -0
  180. package/dist/runtime/organizationRuntimeControl.d.ts.map +1 -1
  181. package/dist/runtime/organizationRuntimeControl.js +72 -24
  182. package/dist/runtime/organizationRuntimeHost.d.ts.map +1 -1
  183. package/dist/runtime/organizationRuntimeHost.js +13 -4
  184. package/dist/runtime/organizationRuntimeParsing.d.ts.map +1 -1
  185. package/dist/runtime/organizationRuntimeParsing.js +4 -1
  186. package/dist/runtime/organizationRuntimeReadiness.d.ts.map +1 -1
  187. package/dist/runtime/organizationRuntimeReadiness.js +8 -0
  188. package/dist/runtime/organizationRuntimeRecording.d.ts +7 -0
  189. package/dist/runtime/organizationRuntimeRecording.d.ts.map +1 -0
  190. package/dist/runtime/organizationRuntimeRecording.js +58 -0
  191. package/dist/runtime/physicalReadiness.d.ts +12 -0
  192. package/dist/runtime/physicalReadiness.d.ts.map +1 -1
  193. package/dist/runtime/physicalReadiness.js +43 -9
  194. package/dist/runtime/productionAgentTools.d.ts.map +1 -1
  195. package/dist/runtime/productionAgentTools.js +13 -5
  196. package/dist/runtime/relocateRuntimeConfig.d.ts +14 -0
  197. package/dist/runtime/relocateRuntimeConfig.d.ts.map +1 -0
  198. package/dist/runtime/relocateRuntimeConfig.js +38 -0
  199. package/dist/runtime/schedule.d.ts.map +1 -1
  200. package/dist/runtime/schedule.js +12 -7
  201. package/dist/runtime/storeCoordination.d.ts +10 -0
  202. package/dist/runtime/storeCoordination.d.ts.map +1 -1
  203. package/dist/runtime/storeCoordination.js +23 -0
  204. package/dist/runtime/taskClock.d.ts +42 -0
  205. package/dist/runtime/taskClock.d.ts.map +1 -0
  206. package/dist/runtime/taskClock.js +102 -0
  207. package/dist/runtime/taskClockProcess.d.ts +17 -0
  208. package/dist/runtime/taskClockProcess.d.ts.map +1 -0
  209. package/dist/runtime/taskClockProcess.js +58 -0
  210. package/dist/runtime/turnRequestLedger.d.ts +0 -5
  211. package/dist/runtime/turnRequestLedger.d.ts.map +1 -1
  212. package/dist/runtime/turnRequestLedger.js +23 -21
  213. package/dist/runtime/wakeAcceptanceClaimDiagnostics.d.ts +34 -0
  214. package/dist/runtime/wakeAcceptanceClaimDiagnostics.d.ts.map +1 -0
  215. package/dist/runtime/wakeAcceptanceClaimDiagnostics.js +79 -0
  216. package/dist/runtime/wakeAcceptanceIndex.d.ts +55 -0
  217. package/dist/runtime/wakeAcceptanceIndex.d.ts.map +1 -0
  218. package/dist/runtime/wakeAcceptanceIndex.js +158 -0
  219. package/dist/runtime/wakeAcceptanceProcessIdentity.d.ts +9 -1
  220. package/dist/runtime/wakeAcceptanceProcessIdentity.d.ts.map +1 -1
  221. package/dist/runtime/wakeAcceptanceProcessIdentity.js +5 -1
  222. package/dist/runtime/wakeAcceptanceRecord.d.ts +2 -0
  223. package/dist/runtime/wakeAcceptanceRecord.d.ts.map +1 -1
  224. package/dist/runtime/wakeAcceptanceRecord.js +4 -2
  225. package/dist/runtime/wakeAcceptanceRetention.d.ts +25 -1
  226. package/dist/runtime/wakeAcceptanceRetention.d.ts.map +1 -1
  227. package/dist/runtime/wakeAcceptanceRetention.js +28 -2
  228. package/dist/runtime/wakeAcceptanceStore.d.ts +8 -8
  229. package/dist/runtime/wakeAcceptanceStore.d.ts.map +1 -1
  230. package/dist/runtime/wakeAcceptanceStore.js +66 -63
  231. package/dist/runtime/wakeFuse.d.ts +58 -3
  232. package/dist/runtime/wakeFuse.d.ts.map +1 -1
  233. package/dist/runtime/wakeFuse.js +106 -7
  234. package/dist/runtime/wakeMomentFs.d.ts +27 -0
  235. package/dist/runtime/wakeMomentFs.d.ts.map +1 -0
  236. package/dist/runtime/wakeMomentFs.js +223 -0
  237. package/dist/runtime/wakeMomentHistory.d.ts +26 -0
  238. package/dist/runtime/wakeMomentHistory.d.ts.map +1 -0
  239. package/dist/runtime/wakeMomentHistory.js +109 -0
  240. package/dist/runtime/wakeMomentIo.d.ts +22 -0
  241. package/dist/runtime/wakeMomentIo.d.ts.map +1 -0
  242. package/dist/runtime/wakeMomentIo.js +114 -0
  243. package/dist/runtime/wakeMomentRecorder.d.ts +33 -0
  244. package/dist/runtime/wakeMomentRecorder.d.ts.map +1 -0
  245. package/dist/runtime/wakeMomentRecorder.js +81 -0
  246. package/dist/runtime/wakeMomentRetention.d.ts +7 -0
  247. package/dist/runtime/wakeMomentRetention.d.ts.map +1 -0
  248. package/dist/runtime/wakeMomentRetention.js +143 -0
  249. package/dist/runtime/wakeMomentRows.d.ts +8 -0
  250. package/dist/runtime/wakeMomentRows.d.ts.map +1 -0
  251. package/dist/runtime/wakeMomentRows.js +66 -0
  252. package/dist/runtime/wakeMomentSnapshot.d.ts +56 -0
  253. package/dist/runtime/wakeMomentSnapshot.d.ts.map +1 -0
  254. package/dist/runtime/wakeMomentSnapshot.js +248 -0
  255. 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
- constructor(socketPath?: string);
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":"AAGA,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;AAetE,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;IAAE,MAAM,CAAC,EAAE,8BAA8B,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAC5G,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;IAC1D,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,SAAyC;IAC1E,KAAK,IAAG,OAAO,CAAC,IAAI,CAAC;IAC3B;;;;;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;IAM5D,OAAO,CAAC,QAAQ;IACV,IAAI,CAAC,OAAO,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,WAAW,EAAC,MAAM,EAAC,MAAM,CAAC,EAAC,WAAW,EAAC,OAAO,GAAC,uBAA0B,GAAE,OAAO,CAAC,MAAM,CAAC;CAMjJ"}
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
- constructor(socketPath = "/run/daimon-engine-broker/control.sock") {
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() { const requestId = randomUUID(), socket = createConnection({ path: this.socketPath }), decoder = new EngineBrokerFrameDecoder(); await new Promise((resolve, reject) => { let settled = false; const fail = () => { if (settled)
32
- return; settled = true; socket.destroy(); reject(new Error("engine broker unavailable")); }; socket.once("error", fail); socket.once("close", fail); socket.once("connect", () => socket.write(encodeEngineBrokerFrame({ version: ENGINE_BROKER_VERSION, kind: "health", requestId }))); socket.on("data", (chunk) => { try {
33
- for (const value of decoder.push(chunk)) {
34
- const response = parseEngineBrokerResponse(value);
35
- if (response.kind !== "ready" || response.requestId !== requestId || settled)
36
- throw new Error();
37
- settled = true;
38
- socket.destroy();
39
- resolve();
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("engine broker unavailable");
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("engine broker unavailable");
90
+ throw new Error(`engine broker unavailable (requires control protocol ${ENGINE_BROKER_VERSION})`);
66
91
  return response.released;
67
92
  }
68
- exchange(request) { const socket = createConnection({ path: this.socketPath }), decoder = new EngineBrokerFrameDecoder(); return new Promise((resolve, reject) => { let settled = false; const fail = () => { if (settled)
69
- return; settled = true; socket.destroy(); reject(new Error("engine broker unavailable")); }; socket.once("error", fail); socket.once("close", fail); socket.once("connect", () => socket.write(encodeEngineBrokerFrame(request))); socket.on("data", (chunk) => { try {
70
- for (const value of decoder.push(chunk)) {
71
- const response = parseEngineBrokerResponse(value);
72
- if (settled || response.requestId !== request.requestId || (response.kind !== "inference_grant" && response.kind !== "inference_grant_released" && response.kind !== "inference_grant_refused"))
73
- throw new Error();
74
- settled = true;
75
- socket.destroy();
76
- resolve(response);
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 turnId = createHash("sha256").update(`${agentId}\0${wakeId}`).digest("hex"), requestId = randomUUID();
84
- const request = { version: ENGINE_BROKER_VERSION, kind: "start_turn", requestId, turnId, agentId, wakeId, prompt, mcpEndpoint, ...(options.limits === undefined ? {} : { limits: options.limits }) };
85
- const socket = createConnection({ path: this.socketPath });
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, settled = false;
89
- const fail = () => { if (settled)
90
- return; settled = true; cleanup(); reject(new Error("engine broker unavailable")); };
91
- const cleanup = () => { signal?.removeEventListener("abort", abort); socket.destroy(); };
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") || response.requestId !== requestId || response.turnId !== turnId)
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
- else
120
- reject(new Error(`engine broker turn failed (${response.code}${response.limitReason === "none" ? "" : `; limit=${response.limitReason}`}${response.diagnostic ? `; ${response.diagnostic.stage}/${response.diagnostic.failureClass}; exit=${response.diagnostic.exitCode}; signal=${response.diagnostic.termSignal}${response.diagnostic.reason === undefined ? "" : `; reason=${response.diagnostic.reason}`}` : ""}${renderMcpCalls(response.mcpCalls)})`));
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;AAG3N,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,uBAAuB,CAKpF;AAED,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAI3H"}
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 = "noopolis.daimon.engine-broker.v2";
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 v2 envelope checks; `requestId` is the parsed id. */
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":"AAEA,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,kCAAkC,CAAC;AAC5C,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,uFAAuF;AACvF,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
+ {"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, additive kinds of control protocol v2.
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), so the kinds join v2 without a version bump; a broker that
8
- * predates them refuses the unknown kind and closes the connection, which the
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 v2 envelope checks; `requestId` is the parsed id. */
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;AAY/E,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;IA8B9E;;;;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,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,8BAA8B,GAAG,SAAS;CAmBpE"}
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;AA4C/K,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,eAAO,MAAM,mCAAmC,QAAc,CAAC;AAI/D,wBAAsB,0BAA0B;sBA0G1B,MAAM,UAAU,MAAM,YAAY,MAAM,GAAG,MAAM;mBAQpD,MAAM,GAAG,IAAI;IAM5B;;;;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"}
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, ENGINE_BROKER_MCP_CAPABILITY_TTL_MS, ENGINE_BROKER_MCP_CAPABILITY_REQUESTS);
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 "node:child_process";
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)