@panorama-ai/gateway 2.29.14 → 2.30.181

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 (320) hide show
  1. package/README.md +167 -10
  2. package/dist/child-process-env.d.ts.map +1 -1
  3. package/dist/child-process-env.js +1 -0
  4. package/dist/child-process-env.js.map +1 -1
  5. package/dist/cli-args.d.ts +11 -0
  6. package/dist/cli-args.d.ts.map +1 -0
  7. package/dist/cli-args.js +72 -0
  8. package/dist/cli-args.js.map +1 -0
  9. package/dist/cli-command-discovery.d.ts +17 -0
  10. package/dist/cli-command-discovery.d.ts.map +1 -0
  11. package/dist/cli-command-discovery.js +229 -0
  12. package/dist/cli-command-discovery.js.map +1 -0
  13. package/dist/cli-env.d.ts +7 -0
  14. package/dist/cli-env.d.ts.map +1 -0
  15. package/dist/cli-env.js +82 -0
  16. package/dist/cli-env.js.map +1 -0
  17. package/dist/cli-output.d.ts +23 -0
  18. package/dist/cli-output.d.ts.map +1 -0
  19. package/dist/cli-output.js +86 -0
  20. package/dist/cli-output.js.map +1 -0
  21. package/dist/cli-provider-commands.d.ts +59 -0
  22. package/dist/cli-provider-commands.d.ts.map +1 -0
  23. package/dist/cli-provider-commands.js +157 -0
  24. package/dist/cli-provider-commands.js.map +1 -0
  25. package/dist/cli-providers/claude.d.ts.map +1 -1
  26. package/dist/cli-providers/claude.js +11 -110
  27. package/dist/cli-providers/claude.js.map +1 -1
  28. package/dist/cli-providers/codex.d.ts.map +1 -1
  29. package/dist/cli-providers/codex.js +13 -53
  30. package/dist/cli-providers/codex.js.map +1 -1
  31. package/dist/cli-providers/gemini.d.ts.map +1 -1
  32. package/dist/cli-providers/gemini.js +18 -88
  33. package/dist/cli-providers/gemini.js.map +1 -1
  34. package/dist/cli-providers/types.d.ts +3 -1
  35. package/dist/cli-providers/types.d.ts.map +1 -1
  36. package/dist/cli-providers/types.js.map +1 -1
  37. package/dist/database.types.d.ts +4209 -759
  38. package/dist/database.types.d.ts.map +1 -1
  39. package/dist/database.types.js +0 -3
  40. package/dist/database.types.js.map +1 -1
  41. package/dist/debug-redaction.d.ts +11 -0
  42. package/dist/debug-redaction.d.ts.map +1 -1
  43. package/dist/debug-redaction.js +33 -4
  44. package/dist/debug-redaction.js.map +1 -1
  45. package/dist/finalize-subagent-run.d.ts +28 -0
  46. package/dist/finalize-subagent-run.d.ts.map +1 -0
  47. package/dist/finalize-subagent-run.js +34 -0
  48. package/dist/finalize-subagent-run.js.map +1 -0
  49. package/dist/gateway-capability-services.d.ts +10 -0
  50. package/dist/gateway-capability-services.d.ts.map +1 -0
  51. package/dist/gateway-capability-services.js +40 -0
  52. package/dist/gateway-capability-services.js.map +1 -0
  53. package/dist/gateway-cli-commands.d.ts +25 -0
  54. package/dist/gateway-cli-commands.d.ts.map +1 -0
  55. package/dist/gateway-cli-commands.js +202 -0
  56. package/dist/gateway-cli-commands.js.map +1 -0
  57. package/dist/gateway-command-runner.d.ts +48 -0
  58. package/dist/gateway-command-runner.d.ts.map +1 -0
  59. package/dist/gateway-command-runner.js +154 -0
  60. package/dist/gateway-command-runner.js.map +1 -0
  61. package/dist/gateway-control-plane.d.ts +44 -0
  62. package/dist/gateway-control-plane.d.ts.map +1 -0
  63. package/dist/gateway-control-plane.js +147 -0
  64. package/dist/gateway-control-plane.js.map +1 -0
  65. package/dist/gateway-daemon.d.ts +41 -0
  66. package/dist/gateway-daemon.d.ts.map +1 -0
  67. package/dist/gateway-daemon.js +69 -0
  68. package/dist/gateway-daemon.js.map +1 -0
  69. package/dist/gateway-doctor.d.ts +45 -0
  70. package/dist/gateway-doctor.d.ts.map +1 -0
  71. package/dist/gateway-doctor.js +81 -0
  72. package/dist/gateway-doctor.js.map +1 -0
  73. package/dist/gateway-execution-support.d.ts +56 -0
  74. package/dist/gateway-execution-support.d.ts.map +1 -0
  75. package/dist/gateway-execution-support.js +135 -0
  76. package/dist/gateway-execution-support.js.map +1 -0
  77. package/dist/gateway-job-controller.d.ts +68 -0
  78. package/dist/gateway-job-controller.d.ts.map +1 -0
  79. package/dist/gateway-job-controller.js +266 -0
  80. package/dist/gateway-job-controller.js.map +1 -0
  81. package/dist/gateway-job-handlers.d.ts +76 -0
  82. package/dist/gateway-job-handlers.d.ts.map +1 -0
  83. package/dist/gateway-job-handlers.js +235 -0
  84. package/dist/gateway-job-handlers.js.map +1 -0
  85. package/dist/gateway-job-processor.d.ts +24 -0
  86. package/dist/gateway-job-processor.d.ts.map +1 -0
  87. package/dist/gateway-job-processor.js +90 -0
  88. package/dist/gateway-job-processor.js.map +1 -0
  89. package/dist/gateway-job-store.d.ts +13 -0
  90. package/dist/gateway-job-store.d.ts.map +1 -0
  91. package/dist/gateway-job-store.js +106 -0
  92. package/dist/gateway-job-store.js.map +1 -0
  93. package/dist/gateway-jobs.d.ts +31 -0
  94. package/dist/gateway-jobs.d.ts.map +1 -0
  95. package/dist/gateway-jobs.js +52 -0
  96. package/dist/gateway-jobs.js.map +1 -0
  97. package/dist/gateway-lifecycle.d.ts +43 -0
  98. package/dist/gateway-lifecycle.d.ts.map +1 -0
  99. package/dist/gateway-lifecycle.js +62 -0
  100. package/dist/gateway-lifecycle.js.map +1 -0
  101. package/dist/gateway-local-runtime.d.ts +68 -0
  102. package/dist/gateway-local-runtime.d.ts.map +1 -0
  103. package/dist/gateway-local-runtime.js +208 -0
  104. package/dist/gateway-local-runtime.js.map +1 -0
  105. package/dist/gateway-model-run.d.ts +48 -0
  106. package/dist/gateway-model-run.d.ts.map +1 -0
  107. package/dist/gateway-model-run.js +205 -0
  108. package/dist/gateway-model-run.js.map +1 -0
  109. package/dist/gateway-operational-status.d.ts +1 -1
  110. package/dist/gateway-operational-status.d.ts.map +1 -1
  111. package/dist/gateway-operational-status.js +7 -14
  112. package/dist/gateway-operational-status.js.map +1 -1
  113. package/dist/gateway-pairing.d.ts +58 -0
  114. package/dist/gateway-pairing.d.ts.map +1 -0
  115. package/dist/gateway-pairing.js +151 -0
  116. package/dist/gateway-pairing.js.map +1 -0
  117. package/dist/gateway-provider-capabilities.d.ts +59 -0
  118. package/dist/gateway-provider-capabilities.d.ts.map +1 -0
  119. package/dist/gateway-provider-capabilities.js +231 -0
  120. package/dist/gateway-provider-capabilities.js.map +1 -0
  121. package/dist/gateway-provider-health.d.ts +19 -0
  122. package/dist/gateway-provider-health.d.ts.map +1 -0
  123. package/dist/gateway-provider-health.js +75 -0
  124. package/dist/gateway-provider-health.js.map +1 -0
  125. package/dist/gateway-provider-runtime.d.ts +72 -0
  126. package/dist/gateway-provider-runtime.d.ts.map +1 -0
  127. package/dist/gateway-provider-runtime.js +169 -0
  128. package/dist/gateway-provider-runtime.js.map +1 -0
  129. package/dist/gateway-restart.d.ts +8 -0
  130. package/dist/gateway-restart.d.ts.map +1 -0
  131. package/dist/gateway-restart.js +129 -0
  132. package/dist/gateway-restart.js.map +1 -0
  133. package/dist/gateway-run-helpers.d.ts +35 -0
  134. package/dist/gateway-run-helpers.d.ts.map +1 -0
  135. package/dist/gateway-run-helpers.js +203 -0
  136. package/dist/gateway-run-helpers.js.map +1 -0
  137. package/dist/gateway-runtime-provider-health.d.ts +31 -0
  138. package/dist/gateway-runtime-provider-health.d.ts.map +1 -0
  139. package/dist/gateway-runtime-provider-health.js +99 -0
  140. package/dist/gateway-runtime-provider-health.js.map +1 -0
  141. package/dist/gateway-runtime-state.d.ts +35 -0
  142. package/dist/gateway-runtime-state.d.ts.map +1 -0
  143. package/dist/gateway-runtime-state.js +18 -0
  144. package/dist/gateway-runtime-state.js.map +1 -0
  145. package/dist/gateway-shell-exec.d.ts +46 -0
  146. package/dist/gateway-shell-exec.d.ts.map +1 -0
  147. package/dist/gateway-shell-exec.js +130 -0
  148. package/dist/gateway-shell-exec.js.map +1 -0
  149. package/dist/gateway-start-command.d.ts +28 -0
  150. package/dist/gateway-start-command.d.ts.map +1 -0
  151. package/dist/gateway-start-command.js +101 -0
  152. package/dist/gateway-start-command.js.map +1 -0
  153. package/dist/gateway-state.d.ts +29 -0
  154. package/dist/gateway-state.d.ts.map +1 -0
  155. package/dist/gateway-state.js +97 -0
  156. package/dist/gateway-state.js.map +1 -0
  157. package/dist/gateway-subagent-run-finalizer.d.ts +27 -0
  158. package/dist/gateway-subagent-run-finalizer.d.ts.map +1 -0
  159. package/dist/gateway-subagent-run-finalizer.js +196 -0
  160. package/dist/gateway-subagent-run-finalizer.js.map +1 -0
  161. package/dist/gateway-subagent-run-job.d.ts +4 -0
  162. package/dist/gateway-subagent-run-job.d.ts.map +1 -0
  163. package/dist/gateway-subagent-run-job.js +430 -0
  164. package/dist/gateway-subagent-run-job.js.map +1 -0
  165. package/dist/gateway-subagent-run-target.d.ts +16 -0
  166. package/dist/gateway-subagent-run-target.d.ts.map +1 -0
  167. package/dist/gateway-subagent-run-target.js +239 -0
  168. package/dist/gateway-subagent-run-target.js.map +1 -0
  169. package/dist/gateway-subagent-run-types.d.ts +110 -0
  170. package/dist/gateway-subagent-run-types.d.ts.map +1 -0
  171. package/dist/gateway-subagent-run-types.js +2 -0
  172. package/dist/gateway-subagent-run-types.js.map +1 -0
  173. package/dist/index.js +11671 -5503
  174. package/dist/index.js.map +7 -1
  175. package/dist/local-runtime/heartbeat-supervisor.d.ts +39 -0
  176. package/dist/local-runtime/heartbeat-supervisor.d.ts.map +1 -0
  177. package/dist/local-runtime/heartbeat-supervisor.js +96 -0
  178. package/dist/local-runtime/heartbeat-supervisor.js.map +1 -0
  179. package/dist/local-runtime/restart-supervisor.d.ts +27 -0
  180. package/dist/local-runtime/restart-supervisor.d.ts.map +1 -0
  181. package/dist/local-runtime/restart-supervisor.js +169 -0
  182. package/dist/local-runtime/restart-supervisor.js.map +1 -0
  183. package/dist/local-runtime/runtime-utils.d.ts +20 -0
  184. package/dist/local-runtime/runtime-utils.d.ts.map +1 -0
  185. package/dist/local-runtime/runtime-utils.js +54 -0
  186. package/dist/local-runtime/runtime-utils.js.map +1 -0
  187. package/dist/local-runtime/shutdown-supervisor.d.ts +32 -0
  188. package/dist/local-runtime/shutdown-supervisor.d.ts.map +1 -0
  189. package/dist/local-runtime/shutdown-supervisor.js +110 -0
  190. package/dist/local-runtime/shutdown-supervisor.js.map +1 -0
  191. package/dist/local-runtime/types.d.ts +26 -0
  192. package/dist/local-runtime/types.d.ts.map +1 -0
  193. package/dist/local-runtime/types.js +2 -0
  194. package/dist/local-runtime/types.js.map +1 -0
  195. package/dist/managed-runtime/config.d.ts +20 -0
  196. package/dist/managed-runtime/config.d.ts.map +1 -0
  197. package/dist/managed-runtime/config.js +80 -0
  198. package/dist/managed-runtime/config.js.map +1 -0
  199. package/dist/managed-runtime/control-client.d.ts +66 -0
  200. package/dist/managed-runtime/control-client.d.ts.map +1 -0
  201. package/dist/managed-runtime/control-client.js +142 -0
  202. package/dist/managed-runtime/control-client.js.map +1 -0
  203. package/dist/managed-runtime/dependencies.d.ts +17 -0
  204. package/dist/managed-runtime/dependencies.d.ts.map +1 -0
  205. package/dist/managed-runtime/dependencies.js +28 -0
  206. package/dist/managed-runtime/dependencies.js.map +1 -0
  207. package/dist/managed-runtime/execution-dispatcher.d.ts +25 -0
  208. package/dist/managed-runtime/execution-dispatcher.d.ts.map +1 -0
  209. package/dist/managed-runtime/execution-dispatcher.js +155 -0
  210. package/dist/managed-runtime/execution-dispatcher.js.map +1 -0
  211. package/dist/managed-runtime/heartbeat.d.ts +7 -0
  212. package/dist/managed-runtime/heartbeat.d.ts.map +1 -0
  213. package/dist/managed-runtime/heartbeat.js +44 -0
  214. package/dist/managed-runtime/heartbeat.js.map +1 -0
  215. package/dist/managed-runtime/host-state.d.ts +15 -0
  216. package/dist/managed-runtime/host-state.d.ts.map +1 -0
  217. package/dist/managed-runtime/host-state.js +50 -0
  218. package/dist/managed-runtime/host-state.js.map +1 -0
  219. package/dist/managed-runtime/realtime.d.ts +25 -0
  220. package/dist/managed-runtime/realtime.d.ts.map +1 -0
  221. package/dist/managed-runtime/realtime.js +189 -0
  222. package/dist/managed-runtime/realtime.js.map +1 -0
  223. package/dist/managed-runtime/runtime-utils.d.ts +8 -0
  224. package/dist/managed-runtime/runtime-utils.d.ts.map +1 -0
  225. package/dist/managed-runtime/runtime-utils.js +39 -0
  226. package/dist/managed-runtime/runtime-utils.js.map +1 -0
  227. package/dist/managed-runtime/shell-execution.d.ts +33 -0
  228. package/dist/managed-runtime/shell-execution.d.ts.map +1 -0
  229. package/dist/managed-runtime/shell-execution.js +186 -0
  230. package/dist/managed-runtime/shell-execution.js.map +1 -0
  231. package/dist/managed-runtime/step-result.d.ts +22 -0
  232. package/dist/managed-runtime/step-result.d.ts.map +1 -0
  233. package/dist/managed-runtime/step-result.js +252 -0
  234. package/dist/managed-runtime/step-result.js.map +1 -0
  235. package/dist/managed-runtime/wake-signal.d.ts +5 -0
  236. package/dist/managed-runtime/wake-signal.d.ts.map +1 -0
  237. package/dist/managed-runtime/wake-signal.js +29 -0
  238. package/dist/managed-runtime/wake-signal.js.map +1 -0
  239. package/dist/managed-runtime.d.ts +8 -0
  240. package/dist/managed-runtime.d.ts.map +1 -0
  241. package/dist/managed-runtime.js +224 -0
  242. package/dist/managed-runtime.js.map +1 -0
  243. package/dist/{subagent-process-control.d.ts → process-control.d.ts} +1 -1
  244. package/dist/process-control.d.ts.map +1 -0
  245. package/dist/{subagent-process-control.js → process-control.js} +1 -1
  246. package/dist/process-control.js.map +1 -0
  247. package/dist/process-output-capture.d.ts +21 -0
  248. package/dist/process-output-capture.d.ts.map +1 -0
  249. package/dist/process-output-capture.js +47 -0
  250. package/dist/process-output-capture.js.map +1 -0
  251. package/dist/provider-runtime-utils.d.ts +24 -0
  252. package/dist/provider-runtime-utils.d.ts.map +1 -0
  253. package/dist/provider-runtime-utils.js +97 -0
  254. package/dist/provider-runtime-utils.js.map +1 -0
  255. package/dist/remote-shell-resource.d.ts +11 -0
  256. package/dist/remote-shell-resource.d.ts.map +1 -1
  257. package/dist/remote-shell-resource.js +66 -12
  258. package/dist/remote-shell-resource.js.map +1 -1
  259. package/dist/stream-json-collector.d.ts +1 -2
  260. package/dist/stream-json-collector.d.ts.map +1 -1
  261. package/dist/stream-json-collector.js +7 -18
  262. package/dist/stream-json-collector.js.map +1 -1
  263. package/dist/subagent-adapters/claude-code.d.ts.map +1 -1
  264. package/dist/subagent-adapters/claude-code.js +1 -5
  265. package/dist/subagent-adapters/claude-code.js.map +1 -1
  266. package/dist/subagent-adapters/codex.d.ts.map +1 -1
  267. package/dist/subagent-adapters/codex.js +5 -22
  268. package/dist/subagent-adapters/codex.js.map +1 -1
  269. package/dist/subagent-adapters/gemini.d.ts.map +1 -1
  270. package/dist/subagent-adapters/gemini.js +9 -56
  271. package/dist/subagent-adapters/gemini.js.map +1 -1
  272. package/dist/subagent-adapters/output-format.d.ts +3 -0
  273. package/dist/subagent-adapters/output-format.d.ts.map +1 -0
  274. package/dist/subagent-adapters/output-format.js +12 -0
  275. package/dist/subagent-adapters/output-format.js.map +1 -0
  276. package/dist/subagent-adapters/types.d.ts +4 -1
  277. package/dist/subagent-adapters/types.d.ts.map +1 -1
  278. package/dist/subagent-adapters/types.js.map +1 -1
  279. package/dist/subagent-cancel-job.d.ts +25 -0
  280. package/dist/subagent-cancel-job.d.ts.map +1 -0
  281. package/dist/subagent-cancel-job.js +295 -0
  282. package/dist/subagent-cancel-job.js.map +1 -0
  283. package/dist/subagent-failure.d.ts +11 -0
  284. package/dist/subagent-failure.d.ts.map +1 -0
  285. package/dist/subagent-failure.js +99 -0
  286. package/dist/subagent-failure.js.map +1 -0
  287. package/dist/subagent-full-control.d.ts.map +1 -1
  288. package/dist/subagent-full-control.js +7 -4
  289. package/dist/subagent-full-control.js.map +1 -1
  290. package/dist/subagent-output-persistence.d.ts +12 -0
  291. package/dist/subagent-output-persistence.d.ts.map +1 -0
  292. package/dist/subagent-output-persistence.js +15 -0
  293. package/dist/subagent-output-persistence.js.map +1 -0
  294. package/dist/subagent-run-events.d.ts +17 -0
  295. package/dist/subagent-run-events.d.ts.map +1 -0
  296. package/dist/subagent-run-events.js +60 -0
  297. package/dist/subagent-run-events.js.map +1 -0
  298. package/dist/subagent-run-execution.d.ts +39 -0
  299. package/dist/subagent-run-execution.d.ts.map +1 -0
  300. package/dist/subagent-run-execution.js +145 -0
  301. package/dist/subagent-run-execution.js.map +1 -0
  302. package/dist/subagent-run-helpers.d.ts +35 -0
  303. package/dist/subagent-run-helpers.d.ts.map +1 -0
  304. package/dist/subagent-run-helpers.js +88 -0
  305. package/dist/subagent-run-helpers.js.map +1 -0
  306. package/dist/subagent-run-job.d.ts +33 -0
  307. package/dist/subagent-run-job.d.ts.map +1 -0
  308. package/dist/subagent-run-job.js +74 -0
  309. package/dist/subagent-run-job.js.map +1 -0
  310. package/dist/subagent-run-store.d.ts +6 -0
  311. package/dist/subagent-run-store.d.ts.map +1 -0
  312. package/dist/subagent-run-store.js +22 -0
  313. package/dist/subagent-run-store.js.map +1 -0
  314. package/dist/subagent-shutdown-cancellation.d.ts +22 -0
  315. package/dist/subagent-shutdown-cancellation.d.ts.map +1 -0
  316. package/dist/subagent-shutdown-cancellation.js +127 -0
  317. package/dist/subagent-shutdown-cancellation.js.map +1 -0
  318. package/package.json +6 -3
  319. package/dist/subagent-process-control.d.ts.map +0 -1
  320. package/dist/subagent-process-control.js.map +0 -1
@@ -0,0 +1,39 @@
1
+ import type { GatewayCapabilitiesV1 } from '@panorama/shared/gateway/capabilities';
2
+ import type { GatewayProviderCapabilityProgressEvent } from '../gateway-provider-capabilities.js';
3
+ import type { GatewayProviderHealth, GatewayProviderId } from '../cli-providers/types.js';
4
+ import type { GatewayRuntimeState } from '../gateway-runtime-state.js';
5
+ import type { GatewayConfig } from '../gateway-state.js';
6
+ import type { GatewayLocalRuntimeEventPayload, GatewayStatus, GatewaySupabaseClient } from './types.js';
7
+ export interface LocalHeartbeatSupervisor {
8
+ sendCurrentHeartbeat: () => Promise<void>;
9
+ syncOperationalHeartbeatIfChanged: () => Promise<void>;
10
+ refreshHeartbeat: () => Promise<void>;
11
+ start: () => void;
12
+ stop: () => void;
13
+ sendOfflineHeartbeat: () => Promise<void>;
14
+ }
15
+ export declare function createLocalHeartbeatSupervisor(params: {
16
+ supabase: GatewaySupabaseClient;
17
+ config: GatewayConfig;
18
+ runtimeState: GatewayRuntimeState<GatewayLocalRuntimeEventPayload>;
19
+ deviceName: string;
20
+ initialCapabilities: GatewayCapabilitiesV1;
21
+ initialProviderHealth: Record<GatewayProviderId, GatewayProviderHealth>;
22
+ initialStatus: GatewayStatus;
23
+ buildCapabilities: (params?: {
24
+ validationMode?: 'full' | 'light' | 'auto';
25
+ previousHealth?: Partial<Record<GatewayProviderId, GatewayProviderHealth>>;
26
+ deviceName?: string | null;
27
+ installFullControlEnabled?: boolean;
28
+ onProgress?: (event: GatewayProviderCapabilityProgressEvent) => void;
29
+ }) => Promise<{
30
+ capabilities: GatewayCapabilitiesV1;
31
+ providerHealth: Record<GatewayProviderId, GatewayProviderHealth>;
32
+ anyProviderReady: boolean;
33
+ }>;
34
+ refreshRuntimeInstallFullControl: (config: GatewayConfig) => Promise<boolean>;
35
+ sendHeartbeat: (supabase: GatewaySupabaseClient, status: GatewayStatus, capabilities: GatewayCapabilitiesV1, deviceName?: string | null) => Promise<void>;
36
+ logInfo: (message: string, data?: Record<string, unknown>) => void;
37
+ logError: (message: string, data?: Record<string, unknown>) => void;
38
+ }): LocalHeartbeatSupervisor;
39
+ //# sourceMappingURL=heartbeat-supervisor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heartbeat-supervisor.d.ts","sourceRoot":"","sources":["../../src/local-runtime/heartbeat-supervisor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAA;AAElF,OAAO,KAAK,EAAE,sCAAsC,EAAE,MAAM,qCAAqC,CAAA;AACjG,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AACzF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAIxD,OAAO,KAAK,EACV,+BAA+B,EAC/B,aAAa,EACb,qBAAqB,EACtB,MAAM,YAAY,CAAA;AAEnB,MAAM,WAAW,wBAAwB;IACvC,oBAAoB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACzC,iCAAiC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACtD,gBAAgB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,IAAI,EAAE,MAAM,IAAI,CAAA;IAChB,oBAAoB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1C;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE;IACrD,QAAQ,EAAE,qBAAqB,CAAA;IAC/B,MAAM,EAAE,aAAa,CAAA;IACrB,YAAY,EAAE,mBAAmB,CAAC,+BAA+B,CAAC,CAAA;IAClE,UAAU,EAAE,MAAM,CAAA;IAClB,mBAAmB,EAAE,qBAAqB,CAAA;IAC1C,qBAAqB,EAAE,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,CAAA;IACvE,aAAa,EAAE,aAAa,CAAA;IAC5B,iBAAiB,EAAE,CAAC,MAAM,CAAC,EAAE;QAC3B,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;QAC1C,cAAc,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,CAAC,CAAA;QAC1E,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;QAC1B,yBAAyB,CAAC,EAAE,OAAO,CAAA;QACnC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,sCAAsC,KAAK,IAAI,CAAA;KACrE,KAAK,OAAO,CAAC;QACZ,YAAY,EAAE,qBAAqB,CAAA;QACnC,cAAc,EAAE,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,CAAA;QAChE,gBAAgB,EAAE,OAAO,CAAA;KAC1B,CAAC,CAAA;IACF,gCAAgC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC7E,aAAa,EAAE,CACb,QAAQ,EAAE,qBAAqB,EAC/B,MAAM,EAAE,aAAa,EACrB,YAAY,EAAE,qBAAqB,EACnC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,KACvB,OAAO,CAAC,IAAI,CAAC,CAAA;IAClB,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IAClE,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;CACpE,GAAG,wBAAwB,CAkH3B"}
@@ -0,0 +1,96 @@
1
+ import { computeGatewayOperationalStatus } from '../gateway-operational-status.js';
2
+ import { DEFAULT_HEARTBEAT_INTERVAL_MS, } from './runtime-utils.js';
3
+ export function createLocalHeartbeatSupervisor(params) {
4
+ let currentProviderHealth = params.initialProviderHealth;
5
+ let heartbeatStatus = params.initialStatus;
6
+ let heartbeatInFlight = false;
7
+ let heartbeatTimer = null;
8
+ const getCurrentCapabilities = () => {
9
+ return params.runtimeState.currentCapabilities ?? params.initialCapabilities;
10
+ };
11
+ const sendCurrentHeartbeat = async () => {
12
+ await params.sendHeartbeat(params.supabase, heartbeatStatus, getCurrentCapabilities(), params.deviceName);
13
+ };
14
+ const syncOperationalHeartbeatIfChanged = async () => {
15
+ const capabilities = getCurrentCapabilities();
16
+ const nextStatus = computeGatewayOperationalStatus({
17
+ capabilities,
18
+ jobIngressState: params.runtimeState.currentJobIngressState,
19
+ acceptingJobs: params.runtimeState.currentAcceptingJobs,
20
+ });
21
+ if (nextStatus === heartbeatStatus)
22
+ return;
23
+ heartbeatStatus = nextStatus;
24
+ await params.sendHeartbeat(params.supabase, heartbeatStatus, capabilities, params.deviceName);
25
+ };
26
+ const refreshHeartbeat = async () => {
27
+ if (heartbeatInFlight)
28
+ return;
29
+ heartbeatInFlight = true;
30
+ try {
31
+ const installFullControlEnabled = await params.refreshRuntimeInstallFullControl(params.config);
32
+ const { capabilities: nextCapabilities, providerHealth: nextProviderHealth } = await params.buildCapabilities({
33
+ validationMode: 'light',
34
+ previousHealth: params.runtimeState.currentProviderHealth ?? currentProviderHealth,
35
+ deviceName: params.deviceName,
36
+ installFullControlEnabled,
37
+ onProgress: (event) => {
38
+ if (event.stage === 'start')
39
+ return;
40
+ params.logInfo('Provider capability refreshed', {
41
+ provider: event.providerId,
42
+ status: event.status,
43
+ duration_ms: event.durationMs,
44
+ error: event.error,
45
+ });
46
+ },
47
+ });
48
+ currentProviderHealth = nextProviderHealth;
49
+ params.config.providerHealth = nextProviderHealth;
50
+ params.runtimeState.currentCapabilities = nextCapabilities;
51
+ params.runtimeState.currentProviderHealth = nextProviderHealth;
52
+ heartbeatStatus = computeGatewayOperationalStatus({
53
+ capabilities: nextCapabilities,
54
+ jobIngressState: params.runtimeState.currentJobIngressState,
55
+ acceptingJobs: params.runtimeState.currentAcceptingJobs,
56
+ });
57
+ await params.sendHeartbeat(params.supabase, heartbeatStatus, getCurrentCapabilities(), params.deviceName);
58
+ }
59
+ catch (error) {
60
+ heartbeatStatus = 'error';
61
+ params.logError('Failed to refresh gateway capabilities', {
62
+ error: error instanceof Error ? error.message : String(error),
63
+ });
64
+ await params.sendHeartbeat(params.supabase, heartbeatStatus, getCurrentCapabilities(), params.deviceName);
65
+ }
66
+ finally {
67
+ heartbeatInFlight = false;
68
+ }
69
+ };
70
+ const start = () => {
71
+ if (heartbeatTimer)
72
+ return;
73
+ heartbeatTimer = setInterval(() => {
74
+ void refreshHeartbeat();
75
+ }, DEFAULT_HEARTBEAT_INTERVAL_MS);
76
+ };
77
+ const stop = () => {
78
+ if (!heartbeatTimer)
79
+ return;
80
+ clearInterval(heartbeatTimer);
81
+ heartbeatTimer = null;
82
+ };
83
+ const sendOfflineHeartbeat = async () => {
84
+ heartbeatStatus = 'offline';
85
+ await params.sendHeartbeat(params.supabase, 'offline', getCurrentCapabilities(), params.deviceName);
86
+ };
87
+ return {
88
+ sendCurrentHeartbeat,
89
+ syncOperationalHeartbeatIfChanged,
90
+ refreshHeartbeat,
91
+ start,
92
+ stop,
93
+ sendOfflineHeartbeat,
94
+ };
95
+ }
96
+ //# sourceMappingURL=heartbeat-supervisor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heartbeat-supervisor.js","sourceRoot":"","sources":["../../src/local-runtime/heartbeat-supervisor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { type GatewayActiveWorkRegistries, type GatewayShutdownMode } from '../gateway-lifecycle.js';
2
+ import type { GatewayJobController } from '../gateway-job-controller.js';
3
+ import type { SpawnProcess } from './types.js';
4
+ export interface GatewayRestartSupervisor {
5
+ maybeRestart: () => Promise<void>;
6
+ requestRestart: (reason: string) => void;
7
+ start: () => void;
8
+ stop: () => void;
9
+ }
10
+ export declare function createGatewayRestartSupervisor(params: {
11
+ env: NodeJS.ProcessEnv;
12
+ entryPath: string;
13
+ modulePath: string;
14
+ execPath: string;
15
+ processArgs: string[];
16
+ jobController: GatewayJobController;
17
+ activeWorkRegistries: GatewayActiveWorkRegistries;
18
+ spawnProcess?: SpawnProcess;
19
+ exitProcess: (code: number) => void;
20
+ performShutdown: (signal: string, mode?: GatewayShutdownMode) => Promise<void>;
21
+ isShutdownInProgress: () => boolean;
22
+ syncOperationalHeartbeatIfChanged: () => Promise<void>;
23
+ logInfo: (message: string, data?: Record<string, unknown>) => void;
24
+ setIntervalFn?: typeof setInterval;
25
+ clearIntervalFn?: typeof clearInterval;
26
+ }): GatewayRestartSupervisor;
27
+ //# sourceMappingURL=restart-supervisor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart-supervisor.d.ts","sourceRoot":"","sources":["../../src/local-runtime/restart-supervisor.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,2BAA2B,EAChC,KAAK,mBAAmB,EACzB,MAAM,yBAAyB,CAAA;AAChC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAWxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,MAAM,WAAW,wBAAwB;IACvC,YAAY,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACjC,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,IAAI,EAAE,MAAM,IAAI,CAAA;CACjB;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE;IACrD,GAAG,EAAE,MAAM,CAAC,UAAU,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,aAAa,EAAE,oBAAoB,CAAA;IACnC,oBAAoB,EAAE,2BAA2B,CAAA;IACjD,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9E,oBAAoB,EAAE,MAAM,OAAO,CAAA;IACnC,iCAAiC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACtD,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IAClE,aAAa,CAAC,EAAE,OAAO,WAAW,CAAA;IAClC,eAAe,CAAC,EAAE,OAAO,aAAa,CAAA;CACvC,GAAG,wBAAwB,CAwK3B"}
@@ -0,0 +1,169 @@
1
+ import { spawn } from 'node:child_process';
2
+ import path from 'node:path';
3
+ import { parseBooleanEnv, parseNumberEnv } from '../cli-env.js';
4
+ import { getGatewayActiveWorkCounts, hasGatewayActiveWork, } from '../gateway-lifecycle.js';
5
+ import { readGatewayPackageVersion, readRestartProbeFingerprint, resolveGatewayPackageJsonPath, resolveGatewayRestartProbePath, } from '../gateway-restart.js';
6
+ import { isGatewayDevRuntimeModule, resolveRestartCheckIntervalMs, } from './runtime-utils.js';
7
+ export function createGatewayRestartSupervisor(params) {
8
+ const spawnProcess = params.spawnProcess ?? spawn;
9
+ const setIntervalFn = params.setIntervalFn ?? setInterval;
10
+ const clearIntervalFn = params.clearIntervalFn ?? clearInterval;
11
+ const isDevModule = isGatewayDevRuntimeModule({
12
+ entryPath: params.entryPath,
13
+ modulePath: params.modulePath,
14
+ });
15
+ const autoRestartEnabled = parseBooleanEnv(params.env.PANORAMA_GATEWAY_AUTO_RESTART, !isDevModule);
16
+ const restartCheckIntervalMs = resolveRestartCheckIntervalMs(params.env);
17
+ const restartMaxWaitMs = Math.max(0, parseNumberEnv(params.env.PANORAMA_GATEWAY_RESTART_MAX_WAIT_MS, 0));
18
+ const packageJsonPath = autoRestartEnabled
19
+ ? resolveGatewayPackageJsonPath(params.entryPath, {
20
+ modulePath: params.modulePath,
21
+ env: params.env,
22
+ })
23
+ : null;
24
+ const startingVersion = packageJsonPath ? readGatewayPackageVersion(packageJsonPath) : null;
25
+ const restartProbePath = autoRestartEnabled
26
+ ? resolveGatewayRestartProbePath(params.entryPath, params.modulePath)
27
+ : null;
28
+ const startingProbeFingerprint = restartProbePath
29
+ ? readRestartProbeFingerprint(restartProbePath)
30
+ : null;
31
+ const restartCheckEnabled = autoRestartEnabled &&
32
+ ((packageJsonPath && startingVersion) || (restartProbePath && startingProbeFingerprint));
33
+ let observedVersion = startingVersion;
34
+ let observedProbeFingerprint = startingProbeFingerprint;
35
+ let restartRequested = false;
36
+ let restartDetectedAt = null;
37
+ let restartMaxWaitLogged = false;
38
+ let restartTimer = null;
39
+ const restartGateway = async (reason) => {
40
+ if (params.isShutdownInProgress())
41
+ return;
42
+ const counts = getGatewayActiveWorkCounts({
43
+ jobController: params.jobController,
44
+ registries: params.activeWorkRegistries,
45
+ });
46
+ if (hasGatewayActiveWork(counts)) {
47
+ params.logInfo('Gateway restart waiting for active work to drain', {
48
+ reason,
49
+ ...counts,
50
+ });
51
+ return;
52
+ }
53
+ params.logInfo('Gateway restarting', {
54
+ reason,
55
+ active_jobs: params.jobController.activeQueueCount(),
56
+ active_subagent_runs: params.activeWorkRegistries.activeSubagentRuns.size,
57
+ active_model_runs: params.activeWorkRegistries.activeModelRuns.size,
58
+ active_shell_execs: params.activeWorkRegistries.activeShellExecRuns.size,
59
+ });
60
+ const child = spawnProcess(params.execPath, params.processArgs, {
61
+ stdio: 'inherit',
62
+ env: { ...params.env },
63
+ });
64
+ if (child.pid) {
65
+ params.logInfo('Gateway replacement spawned', { pid: child.pid });
66
+ }
67
+ child.unref();
68
+ await params.performShutdown(`restart:${reason}`, 'drain');
69
+ params.exitProcess(0);
70
+ };
71
+ const maybeRestart = async () => {
72
+ if (!restartRequested)
73
+ return;
74
+ const counts = getGatewayActiveWorkCounts({
75
+ jobController: params.jobController,
76
+ registries: params.activeWorkRegistries,
77
+ });
78
+ if (hasGatewayActiveWork(counts)) {
79
+ return;
80
+ }
81
+ await restartGateway('all jobs complete');
82
+ };
83
+ const requestRestart = (reason) => {
84
+ if (restartRequested)
85
+ return;
86
+ restartRequested = true;
87
+ restartDetectedAt = Date.now();
88
+ params.jobController.stopAcceptingJobs();
89
+ params.logInfo('Gateway update detected; draining before restart', {
90
+ reason,
91
+ active_jobs: params.jobController.activeQueueCount(),
92
+ active_subagent_runs: params.activeWorkRegistries.activeSubagentRuns.size,
93
+ active_model_runs: params.activeWorkRegistries.activeModelRuns.size,
94
+ active_shell_execs: params.activeWorkRegistries.activeShellExecRuns.size,
95
+ });
96
+ void params.syncOperationalHeartbeatIfChanged();
97
+ void maybeRestart();
98
+ };
99
+ const checkForUpgrade = () => {
100
+ if (!autoRestartEnabled || restartRequested)
101
+ return;
102
+ if (packageJsonPath && observedVersion) {
103
+ const nextVersion = readGatewayPackageVersion(packageJsonPath);
104
+ if (!nextVersion)
105
+ return;
106
+ if (nextVersion !== observedVersion) {
107
+ requestRestart(`gateway version changed (${observedVersion} -> ${nextVersion})`);
108
+ }
109
+ return;
110
+ }
111
+ if (restartProbePath && observedProbeFingerprint) {
112
+ const nextFingerprint = readRestartProbeFingerprint(restartProbePath);
113
+ if (!nextFingerprint)
114
+ return;
115
+ if (nextFingerprint !== observedProbeFingerprint) {
116
+ requestRestart(`gateway entry changed (${path.basename(restartProbePath)})`);
117
+ }
118
+ }
119
+ };
120
+ const start = () => {
121
+ if (restartTimer)
122
+ return;
123
+ if (restartCheckEnabled) {
124
+ if (!packageJsonPath && restartProbePath && startingProbeFingerprint) {
125
+ params.logInfo('Gateway auto-restart using entrypoint fingerprint', {
126
+ path: restartProbePath,
127
+ });
128
+ }
129
+ restartTimer = setIntervalFn(() => {
130
+ checkForUpgrade();
131
+ if (restartRequested && restartDetectedAt && restartMaxWaitMs > 0) {
132
+ const elapsedMs = Date.now() - restartDetectedAt;
133
+ if (elapsedMs >= restartMaxWaitMs) {
134
+ void maybeRestart();
135
+ if (!restartMaxWaitLogged) {
136
+ restartMaxWaitLogged = true;
137
+ const counts = getGatewayActiveWorkCounts({
138
+ jobController: params.jobController,
139
+ registries: params.activeWorkRegistries,
140
+ });
141
+ params.logInfo('Gateway restart max wait reached; continuing to drain active work', {
142
+ wait_ms: elapsedMs,
143
+ ...counts,
144
+ });
145
+ }
146
+ }
147
+ }
148
+ }, restartCheckIntervalMs);
149
+ }
150
+ else if (autoRestartEnabled) {
151
+ params.logInfo('Gateway auto-restart disabled (package.json not found)', {
152
+ entryPath: params.entryPath,
153
+ });
154
+ }
155
+ };
156
+ const stop = () => {
157
+ if (!restartTimer)
158
+ return;
159
+ clearIntervalFn(restartTimer);
160
+ restartTimer = null;
161
+ };
162
+ return {
163
+ maybeRestart,
164
+ requestRestart,
165
+ start,
166
+ stop,
167
+ };
168
+ }
169
+ //# sourceMappingURL=restart-supervisor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart-supervisor.js","sourceRoot":"","sources":["../../src/local-runtime/restart-supervisor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC/D,OAAO,EACL,0BAA0B,EAC1B,oBAAoB,GAGrB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,6BAA6B,EAC7B,8BAA8B,GAC/B,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,yBAAyB,EACzB,6BAA6B,GAC9B,MAAM,oBAAoB,CAAA;AAU3B,MAAM,UAAU,8BAA8B,CAAC,MAgB9C;IACC,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,KAAK,CAAA;IACjD,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,WAAW,CAAA;IACzD,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,aAAa,CAAA;IAC/D,MAAM,WAAW,GAAG,yBAAyB,CAAC;QAC5C,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAC,CAAA;IACF,MAAM,kBAAkB,GAAG,eAAe,CACxC,MAAM,CAAC,GAAG,CAAC,6BAA6B,EACxC,CAAC,WAAW,CACb,CAAA;IACD,MAAM,sBAAsB,GAAG,6BAA6B,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACxE,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAC/B,CAAC,EACD,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,oCAAoC,EAAE,CAAC,CAAC,CACnE,CAAA;IACD,MAAM,eAAe,GAAG,kBAAkB;QACxC,CAAC,CAAC,6BAA6B,CAAC,MAAM,CAAC,SAAS,EAAE;YAC9C,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,GAAG,EAAE,MAAM,CAAC,GAAG;SAChB,CAAC;QACJ,CAAC,CAAC,IAAI,CAAA;IACR,MAAM,eAAe,GAAG,eAAe,CAAC,CAAC,CAAC,yBAAyB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC3F,MAAM,gBAAgB,GAAG,kBAAkB;QACzC,CAAC,CAAC,8BAA8B,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC;QACrE,CAAC,CAAC,IAAI,CAAA;IACR,MAAM,wBAAwB,GAAG,gBAAgB;QAC/C,CAAC,CAAC,2BAA2B,CAAC,gBAAgB,CAAC;QAC/C,CAAC,CAAC,IAAI,CAAA;IACR,MAAM,mBAAmB,GACvB,kBAAkB;QAClB,CAAC,CAAC,eAAe,IAAI,eAAe,CAAC,IAAI,CAAC,gBAAgB,IAAI,wBAAwB,CAAC,CAAC,CAAA;IAE1F,IAAI,eAAe,GAAG,eAAe,CAAA;IACrC,IAAI,wBAAwB,GAAG,wBAAwB,CAAA;IACvD,IAAI,gBAAgB,GAAG,KAAK,CAAA;IAC5B,IAAI,iBAAiB,GAAkB,IAAI,CAAA;IAC3C,IAAI,oBAAoB,GAAG,KAAK,CAAA;IAChC,IAAI,YAAY,GAA0B,IAAI,CAAA;IAE9C,MAAM,cAAc,GAAG,KAAK,EAAE,MAAc,EAAiB,EAAE;QAC7D,IAAI,MAAM,CAAC,oBAAoB,EAAE;YAAE,OAAM;QACzC,MAAM,MAAM,GAAG,0BAA0B,CAAC;YACxC,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,UAAU,EAAE,MAAM,CAAC,oBAAoB;SACxC,CAAC,CAAA;QACF,IAAI,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,OAAO,CAAC,kDAAkD,EAAE;gBACjE,MAAM;gBACN,GAAG,MAAM;aACV,CAAC,CAAA;YACF,OAAM;QACR,CAAC;QAED,MAAM,CAAC,OAAO,CAAC,oBAAoB,EAAE;YACnC,MAAM;YACN,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC,gBAAgB,EAAE;YACpD,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,IAAI;YACzE,iBAAiB,EAAE,MAAM,CAAC,oBAAoB,CAAC,eAAe,CAAC,IAAI;YACnE,kBAAkB,EAAE,MAAM,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,IAAI;SACzE,CAAC,CAAA;QACF,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,WAAW,EAAE;YAC9D,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE;SACvB,CAAC,CAAA;QACF,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;YACd,MAAM,CAAC,OAAO,CAAC,6BAA6B,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAA;QACnE,CAAC;QACD,KAAK,CAAC,KAAK,EAAE,CAAA;QACb,MAAM,MAAM,CAAC,eAAe,CAAC,WAAW,MAAM,EAAE,EAAE,OAAO,CAAC,CAAA;QAC1D,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;IACvB,CAAC,CAAA;IAED,MAAM,YAAY,GAAG,KAAK,IAAI,EAAE;QAC9B,IAAI,CAAC,gBAAgB;YAAE,OAAM;QAC7B,MAAM,MAAM,GAAG,0BAA0B,CAAC;YACxC,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,UAAU,EAAE,MAAM,CAAC,oBAAoB;SACxC,CAAC,CAAA;QACF,IAAI,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,OAAM;QACR,CAAC;QACD,MAAM,cAAc,CAAC,mBAAmB,CAAC,CAAA;IAC3C,CAAC,CAAA;IAED,MAAM,cAAc,GAAG,CAAC,MAAc,EAAE,EAAE;QACxC,IAAI,gBAAgB;YAAE,OAAM;QAC5B,gBAAgB,GAAG,IAAI,CAAA;QACvB,iBAAiB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC9B,MAAM,CAAC,aAAa,CAAC,iBAAiB,EAAE,CAAA;QACxC,MAAM,CAAC,OAAO,CAAC,kDAAkD,EAAE;YACjE,MAAM;YACN,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC,gBAAgB,EAAE;YACpD,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,IAAI;YACzE,iBAAiB,EAAE,MAAM,CAAC,oBAAoB,CAAC,eAAe,CAAC,IAAI;YACnE,kBAAkB,EAAE,MAAM,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,IAAI;SACzE,CAAC,CAAA;QACF,KAAK,MAAM,CAAC,iCAAiC,EAAE,CAAA;QAC/C,KAAK,YAAY,EAAE,CAAA;IACrB,CAAC,CAAA;IAED,MAAM,eAAe,GAAG,GAAG,EAAE;QAC3B,IAAI,CAAC,kBAAkB,IAAI,gBAAgB;YAAE,OAAM;QACnD,IAAI,eAAe,IAAI,eAAe,EAAE,CAAC;YACvC,MAAM,WAAW,GAAG,yBAAyB,CAAC,eAAe,CAAC,CAAA;YAC9D,IAAI,CAAC,WAAW;gBAAE,OAAM;YACxB,IAAI,WAAW,KAAK,eAAe,EAAE,CAAC;gBACpC,cAAc,CAAC,4BAA4B,eAAe,OAAO,WAAW,GAAG,CAAC,CAAA;YAClF,CAAC;YACD,OAAM;QACR,CAAC;QACD,IAAI,gBAAgB,IAAI,wBAAwB,EAAE,CAAC;YACjD,MAAM,eAAe,GAAG,2BAA2B,CAAC,gBAAgB,CAAC,CAAA;YACrE,IAAI,CAAC,eAAe;gBAAE,OAAM;YAC5B,IAAI,eAAe,KAAK,wBAAwB,EAAE,CAAC;gBACjD,cAAc,CAAC,0BAA0B,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;YAC9E,CAAC;QACH,CAAC;IACH,CAAC,CAAA;IAED,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,IAAI,YAAY;YAAE,OAAM;QACxB,IAAI,mBAAmB,EAAE,CAAC;YACxB,IAAI,CAAC,eAAe,IAAI,gBAAgB,IAAI,wBAAwB,EAAE,CAAC;gBACrE,MAAM,CAAC,OAAO,CAAC,mDAAmD,EAAE;oBAClE,IAAI,EAAE,gBAAgB;iBACvB,CAAC,CAAA;YACJ,CAAC;YACD,YAAY,GAAG,aAAa,CAAC,GAAG,EAAE;gBAChC,eAAe,EAAE,CAAA;gBACjB,IAAI,gBAAgB,IAAI,iBAAiB,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;oBAClE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,iBAAiB,CAAA;oBAChD,IAAI,SAAS,IAAI,gBAAgB,EAAE,CAAC;wBAClC,KAAK,YAAY,EAAE,CAAA;wBACnB,IAAI,CAAC,oBAAoB,EAAE,CAAC;4BAC1B,oBAAoB,GAAG,IAAI,CAAA;4BAC3B,MAAM,MAAM,GAAG,0BAA0B,CAAC;gCACxC,aAAa,EAAE,MAAM,CAAC,aAAa;gCACnC,UAAU,EAAE,MAAM,CAAC,oBAAoB;6BACxC,CAAC,CAAA;4BACF,MAAM,CAAC,OAAO,CAAC,mEAAmE,EAAE;gCAClF,OAAO,EAAE,SAAS;gCAClB,GAAG,MAAM;6BACV,CAAC,CAAA;wBACJ,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC,EAAE,sBAAsB,CAAC,CAAA;QAC5B,CAAC;aAAM,IAAI,kBAAkB,EAAE,CAAC;YAC9B,MAAM,CAAC,OAAO,CAAC,wDAAwD,EAAE;gBACvE,SAAS,EAAE,MAAM,CAAC,SAAS;aAC5B,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,CAAA;IAED,MAAM,IAAI,GAAG,GAAG,EAAE;QAChB,IAAI,CAAC,YAAY;YAAE,OAAM;QACzB,eAAe,CAAC,YAAY,CAAC,CAAA;QAC7B,YAAY,GAAG,IAAI,CAAA;IACrB,CAAC,CAAA;IAED,OAAO;QACL,YAAY;QACZ,cAAc;QACd,KAAK;QACL,IAAI;KACL,CAAA;AACH,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { GatewaySupabaseClient } from './types.js';
2
+ export declare const DEFAULT_HEARTBEAT_INTERVAL_MS = 30000;
3
+ export declare const DEFAULT_GATEWAY_CONCURRENCY = 10;
4
+ export declare const DEFAULT_JOB_RECONCILE_INTERVAL_MS = 5000;
5
+ export declare const DEFAULT_JOB_CHANNEL_RECONNECT_MS = 5000;
6
+ export declare const DEFAULT_RESTART_CHECK_INTERVAL_MS = 30000;
7
+ export declare const SUBAGENT_CANCEL_KILL_TIMEOUT_MS = 5000;
8
+ export declare const PROCESS_KILL_GRACE_MS = 2000;
9
+ export declare function isGatewayDevRuntimeModule(params: {
10
+ entryPath?: string;
11
+ modulePath?: string;
12
+ }): boolean;
13
+ export declare function readCurrentModulePath(metaUrl?: string): string;
14
+ export declare function resolveGatewayConcurrency(env?: NodeJS.ProcessEnv): number;
15
+ export declare function resolveRestartCheckIntervalMs(env: NodeJS.ProcessEnv): number;
16
+ export declare function createGatewaySupabaseClient(params: {
17
+ supabaseUrl: string;
18
+ supabaseAnonKey: string;
19
+ }): GatewaySupabaseClient;
20
+ //# sourceMappingURL=runtime-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-utils.d.ts","sourceRoot":"","sources":["../../src/local-runtime/runtime-utils.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAEvD,eAAO,MAAM,6BAA6B,QAAS,CAAA;AACnD,eAAO,MAAM,2BAA2B,KAAK,CAAA;AAC7C,eAAO,MAAM,iCAAiC,OAAQ,CAAA;AACtD,eAAO,MAAM,gCAAgC,OAAQ,CAAA;AACrD,eAAO,MAAM,iCAAiC,QAAS,CAAA;AACvD,eAAO,MAAM,+BAA+B,OAAQ,CAAA;AACpD,eAAO,MAAM,qBAAqB,OAAQ,CAAA;AAE1C,wBAAgB,yBAAyB,CAAC,MAAM,EAAE;IAChD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,GAAG,OAAO,CAQV;AAED,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,MAAwB,GAAG,MAAM,CAM/E;AAED,wBAAgB,yBAAyB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAMtF;AAED,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAK5E;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE;IAClD,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,EAAE,MAAM,CAAA;CACxB,GAAG,qBAAqB,CAaxB"}
@@ -0,0 +1,54 @@
1
+ import { createClient } from '@supabase/supabase-js';
2
+ import path from 'node:path';
3
+ import process from 'node:process';
4
+ import { fileURLToPath } from 'node:url';
5
+ import { parseNumberEnv } from '../cli-env.js';
6
+ export const DEFAULT_HEARTBEAT_INTERVAL_MS = 30_000;
7
+ export const DEFAULT_GATEWAY_CONCURRENCY = 10;
8
+ export const DEFAULT_JOB_RECONCILE_INTERVAL_MS = 5_000;
9
+ export const DEFAULT_JOB_CHANNEL_RECONNECT_MS = 5_000;
10
+ export const DEFAULT_RESTART_CHECK_INTERVAL_MS = 30_000;
11
+ export const SUBAGENT_CANCEL_KILL_TIMEOUT_MS = 5_000;
12
+ export const PROCESS_KILL_GRACE_MS = 2_000;
13
+ export function isGatewayDevRuntimeModule(params) {
14
+ const entryPath = params.entryPath ?? '';
15
+ const modulePath = params.modulePath ?? '';
16
+ return (modulePath.endsWith('.ts') ||
17
+ modulePath.includes(`${path.sep}src${path.sep}`) ||
18
+ entryPath.endsWith('.ts'));
19
+ }
20
+ export function readCurrentModulePath(metaUrl = import.meta.url) {
21
+ try {
22
+ return fileURLToPath(metaUrl);
23
+ }
24
+ catch {
25
+ return '';
26
+ }
27
+ }
28
+ export function resolveGatewayConcurrency(env = process.env) {
29
+ const raw = env.PANORAMA_GATEWAY_CONCURRENCY;
30
+ if (!raw)
31
+ return DEFAULT_GATEWAY_CONCURRENCY;
32
+ const parsed = Number.parseInt(raw, 10);
33
+ if (!Number.isFinite(parsed) || parsed <= 0)
34
+ return DEFAULT_GATEWAY_CONCURRENCY;
35
+ return parsed;
36
+ }
37
+ export function resolveRestartCheckIntervalMs(env) {
38
+ return Math.max(1000, parseNumberEnv(env.PANORAMA_GATEWAY_RESTART_CHECK_MS, DEFAULT_RESTART_CHECK_INTERVAL_MS));
39
+ }
40
+ export function createGatewaySupabaseClient(params) {
41
+ return createClient(params.supabaseUrl, params.supabaseAnonKey, {
42
+ auth: {
43
+ persistSession: false,
44
+ autoRefreshToken: true,
45
+ detectSessionInUrl: false,
46
+ },
47
+ realtime: {
48
+ params: {
49
+ eventsPerSecond: 10,
50
+ },
51
+ },
52
+ });
53
+ }
54
+ //# sourceMappingURL=runtime-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-utils.js","sourceRoot":"","sources":["../../src/local-runtime/runtime-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAI9C,MAAM,CAAC,MAAM,6BAA6B,GAAG,MAAM,CAAA;AACnD,MAAM,CAAC,MAAM,2BAA2B,GAAG,EAAE,CAAA;AAC7C,MAAM,CAAC,MAAM,iCAAiC,GAAG,KAAK,CAAA;AACtD,MAAM,CAAC,MAAM,gCAAgC,GAAG,KAAK,CAAA;AACrD,MAAM,CAAC,MAAM,iCAAiC,GAAG,MAAM,CAAA;AACvD,MAAM,CAAC,MAAM,+BAA+B,GAAG,KAAK,CAAA;AACpD,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAA;AAE1C,MAAM,UAAU,yBAAyB,CAAC,MAGzC;IACC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAA;IACxC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE,CAAA;IAC1C,OAAO,CACL,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC1B,UAAU,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;QAChD,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAC1B,CAAA;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,UAAkB,MAAM,CAAC,IAAI,CAAC,GAAG;IACrE,IAAI,CAAC;QACH,OAAO,aAAa,CAAC,OAAO,CAAC,CAAA;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC5E,MAAM,GAAG,GAAG,GAAG,CAAC,4BAA4B,CAAA;IAC5C,IAAI,CAAC,GAAG;QAAE,OAAO,2BAA2B,CAAA;IAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,2BAA2B,CAAA;IAC/E,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,GAAsB;IAClE,OAAO,IAAI,CAAC,GAAG,CACb,IAAI,EACJ,cAAc,CAAC,GAAG,CAAC,iCAAiC,EAAE,iCAAiC,CAAC,CACzF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAG3C;IACC,OAAO,YAAY,CAAW,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,eAAe,EAAE;QACxE,IAAI,EAAE;YACJ,cAAc,EAAE,KAAK;YACrB,gBAAgB,EAAE,IAAI;YACtB,kBAAkB,EAAE,KAAK;SAC1B;QACD,QAAQ,EAAE;YACR,MAAM,EAAE;gBACN,eAAe,EAAE,EAAE;aACpB;SACF;KACF,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,32 @@
1
+ import type { ParsedArgs } from '../cli-args.js';
2
+ import type { GatewayJobController } from '../gateway-job-controller.js';
3
+ import { type GatewayJobStatus } from '../gateway-jobs.js';
4
+ import { type GatewayActiveWorkRegistries, type GatewayChildTerminator, type GatewayShutdownMode } from '../gateway-lifecycle.js';
5
+ import type { GatewayRuntimeState } from '../gateway-runtime-state.js';
6
+ import type { GatewaySubagentRunEventInsert } from '../gateway-subagent-run-types.js';
7
+ import type { GatewayLocalRuntimeEventPayload, GatewaySupabaseClient } from './types.js';
8
+ export interface GatewayShutdownCoordinator {
9
+ performShutdown: (signal: string, mode?: GatewayShutdownMode) => Promise<void>;
10
+ shutdown: (signal: string) => Promise<void>;
11
+ isShutdownInProgress: () => boolean;
12
+ }
13
+ export declare function createGatewayShutdownCoordinator(params: {
14
+ supabase: GatewaySupabaseClient;
15
+ options: ParsedArgs['options'];
16
+ runtimeState: GatewayRuntimeState<GatewayLocalRuntimeEventPayload>;
17
+ jobController: GatewayJobController;
18
+ activeWorkRegistries: GatewayActiveWorkRegistries;
19
+ requestChildTermination: GatewayChildTerminator;
20
+ syncOperationalHeartbeatIfChanged: () => Promise<void>;
21
+ stopHeartbeat: () => void;
22
+ stopRestart: () => void;
23
+ sendOfflineHeartbeat: () => Promise<void>;
24
+ removePidFile: (options?: ParsedArgs['options']) => Promise<void>;
25
+ completeJob: (supabase: GatewaySupabaseClient, jobId: string, status: GatewayJobStatus, result: Record<string, unknown> | null, errorMessage?: string) => Promise<void>;
26
+ getNextSubagentRunEventSequence: (supabase: GatewaySupabaseClient, runId: string) => Promise<number>;
27
+ insertSubagentRunEvent: (params: GatewaySubagentRunEventInsert) => Promise<number | null>;
28
+ logInfo: (message: string, data?: Record<string, unknown>) => void;
29
+ logError: (message: string, data?: Record<string, unknown>) => void;
30
+ exitProcess: (code: number) => void;
31
+ }): GatewayShutdownCoordinator;
32
+ //# sourceMappingURL=shutdown-supervisor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shutdown-supervisor.d.ts","sourceRoot":"","sources":["../../src/local-runtime/shutdown-supervisor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AACxE,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAGL,KAAK,2BAA2B,EAChC,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACzB,MAAM,yBAAyB,CAAA;AAChC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAEtE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,kCAAkC,CAAA;AAMrF,OAAO,KAAK,EAAE,+BAA+B,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAExF,MAAM,WAAW,0BAA0B;IACzC,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9E,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3C,oBAAoB,EAAE,MAAM,OAAO,CAAA;CACpC;AAED,wBAAgB,gCAAgC,CAAC,MAAM,EAAE;IACvD,QAAQ,EAAE,qBAAqB,CAAA;IAC/B,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,CAAA;IAC9B,YAAY,EAAE,mBAAmB,CAAC,+BAA+B,CAAC,CAAA;IAClE,aAAa,EAAE,oBAAoB,CAAA;IACnC,oBAAoB,EAAE,2BAA2B,CAAA;IACjD,uBAAuB,EAAE,sBAAsB,CAAA;IAC/C,iCAAiC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACtD,aAAa,EAAE,MAAM,IAAI,CAAA;IACzB,WAAW,EAAE,MAAM,IAAI,CAAA;IACvB,oBAAoB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACzC,aAAa,EAAE,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACjE,WAAW,EAAE,CACX,QAAQ,EAAE,qBAAqB,EAC/B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,EACtC,YAAY,CAAC,EAAE,MAAM,KAClB,OAAO,CAAC,IAAI,CAAC,CAAA;IAClB,+BAA+B,EAAE,CAC/B,QAAQ,EAAE,qBAAqB,EAC/B,KAAK,EAAE,MAAM,KACV,OAAO,CAAC,MAAM,CAAC,CAAA;IACpB,sBAAsB,EAAE,CAAC,MAAM,EAAE,6BAA6B,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IACzF,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IAClE,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IACnE,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CACpC,GAAG,0BAA0B,CA6H7B"}
@@ -0,0 +1,110 @@
1
+ import { resolveJobSubagentId, } from '../gateway-jobs.js';
2
+ import { requestGatewayActiveWorkShutdown, waitForGatewayActiveWorkToDrain, } from '../gateway-lifecycle.js';
3
+ import { sleep } from '../gateway-run-helpers.js';
4
+ import { cancelSubagentRunOnGatewayShutdown } from '../subagent-shutdown-cancellation.js';
5
+ import { PROCESS_KILL_GRACE_MS, SUBAGENT_CANCEL_KILL_TIMEOUT_MS, } from './runtime-utils.js';
6
+ export function createGatewayShutdownCoordinator(params) {
7
+ let shutdownInProgress = false;
8
+ let shutdownPromise = null;
9
+ const runShutdownStep = async (step, action) => {
10
+ try {
11
+ await action();
12
+ }
13
+ catch (error) {
14
+ params.logError('Gateway shutdown step failed', {
15
+ step,
16
+ error: error instanceof Error ? error.message : String(error),
17
+ });
18
+ }
19
+ };
20
+ const requestActiveWorkShutdown = (mode, reason) => {
21
+ requestGatewayActiveWorkShutdown({
22
+ mode,
23
+ reason,
24
+ registries: params.activeWorkRegistries,
25
+ terminateChild: params.requestChildTermination,
26
+ subagentGraceMs: SUBAGENT_CANCEL_KILL_TIMEOUT_MS,
27
+ processGraceMs: PROCESS_KILL_GRACE_MS,
28
+ });
29
+ };
30
+ const waitForActiveJobsToDrain = async () => {
31
+ await waitForGatewayActiveWorkToDrain({
32
+ jobController: params.jobController,
33
+ registries: params.activeWorkRegistries,
34
+ sleep,
35
+ });
36
+ };
37
+ const cancelSubagentRunOnShutdown = async (subagentId, runId, reason) => {
38
+ await cancelSubagentRunOnGatewayShutdown({
39
+ supabase: params.supabase,
40
+ subagentId,
41
+ runId,
42
+ reason,
43
+ getNextSubagentRunEventSequence: params.getNextSubagentRunEventSequence,
44
+ insertSubagentRunEvent: params.insertSubagentRunEvent,
45
+ logError: params.logError,
46
+ });
47
+ };
48
+ const finalizeResidualGatewayJobs = async (reason) => {
49
+ for (const [jobId, jobRow] of params.jobController.activeClaimedJobEntries()) {
50
+ if (jobRow.job_type === 'subagent_run') {
51
+ const subagentId = resolveJobSubagentId(jobRow);
52
+ const activeRun = subagentId ? params.runtimeState.activeSubagentRuns.get(subagentId) : null;
53
+ if (subagentId && activeRun) {
54
+ await cancelSubagentRunOnShutdown(subagentId, activeRun.runId, reason);
55
+ }
56
+ await params.completeJob(params.supabase, jobId, 'cancelled', { message: reason, cancelled: true }, reason);
57
+ continue;
58
+ }
59
+ await params.completeJob(params.supabase, jobId, 'cancelled', { message: reason, cancelled: true }, reason);
60
+ }
61
+ };
62
+ const performShutdown = async (signal, mode = 'drain') => {
63
+ if (shutdownPromise)
64
+ return await shutdownPromise;
65
+ shutdownPromise = (async () => {
66
+ if (shutdownInProgress)
67
+ return;
68
+ shutdownInProgress = true;
69
+ params.jobController.beginShutdown();
70
+ params.logInfo('Gateway shutting down', { signal, mode });
71
+ params.stopHeartbeat();
72
+ params.stopRestart();
73
+ await runShutdownStep('sync_operational_heartbeat', params.syncOperationalHeartbeatIfChanged);
74
+ requestActiveWorkShutdown(mode, `Gateway shutting down (${signal})`);
75
+ await runShutdownStep('wait_for_active_jobs', waitForActiveJobsToDrain);
76
+ if (mode === 'terminate') {
77
+ await runShutdownStep('finalize_residual_gateway_jobs', () => finalizeResidualGatewayJobs(`Gateway shutting down (${signal})`));
78
+ }
79
+ params.runtimeState.currentJobIngressState = {
80
+ pending: false,
81
+ ready: false,
82
+ };
83
+ await runShutdownStep('send_offline_heartbeat', params.sendOfflineHeartbeat);
84
+ await runShutdownStep('disconnect_job_channel', () => params.jobController.disconnect());
85
+ await runShutdownStep('remove_pid_file', () => params.removePidFile(params.options));
86
+ params.runtimeState.currentRuntimeOptions = null;
87
+ })();
88
+ return await shutdownPromise;
89
+ };
90
+ const shutdown = async (signal) => {
91
+ try {
92
+ await performShutdown(signal);
93
+ }
94
+ catch (error) {
95
+ params.logError('Gateway shutdown failed unexpectedly', {
96
+ signal,
97
+ error: error instanceof Error ? error.message : String(error),
98
+ });
99
+ }
100
+ finally {
101
+ params.exitProcess(0);
102
+ }
103
+ };
104
+ return {
105
+ performShutdown,
106
+ shutdown,
107
+ isShutdownInProgress: () => shutdownInProgress,
108
+ };
109
+ }
110
+ //# sourceMappingURL=shutdown-supervisor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shutdown-supervisor.js","sourceRoot":"","sources":["../../src/local-runtime/shutdown-supervisor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { SupabaseClient } from '@supabase/supabase-js';
2
+ import type { SpawnOptions } from 'node:child_process';
3
+ import type { ParsedArgs } from '../cli-args.js';
4
+ import type { CliDetail } from '../cli-output.js';
5
+ import type { Database } from '../database.types.js';
6
+ export type GatewaySupabaseClient = SupabaseClient<Database>;
7
+ export type GatewayStatus = 'pending' | 'ready' | 'offline' | 'error';
8
+ export type GatewayEventLevel = 'info' | 'warn' | 'error';
9
+ export interface GatewayLocalRuntimeEventPayload {
10
+ level: GatewayEventLevel;
11
+ code?: string;
12
+ message: string;
13
+ provider?: string;
14
+ details?: Record<string, unknown>;
15
+ }
16
+ export interface GatewayLocalRuntimeConfigResolution {
17
+ configDir: string;
18
+ configPath: string;
19
+ migratedFrom?: string;
20
+ }
21
+ export type CliReporter = (message: string, options?: ParsedArgs['options'], details?: CliDetail[]) => void;
22
+ export type SpawnProcess = (command: string, args: string[], options: SpawnOptions) => {
23
+ pid?: number;
24
+ unref: () => void;
25
+ };
26
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/local-runtime/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAEpD,MAAM,MAAM,qBAAqB,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAA;AAC5D,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAA;AACrE,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;AAEzD,MAAM,WAAW,+BAA+B;IAC9C,KAAK,EAAE,iBAAiB,CAAA;IACxB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAClC;AAED,MAAM,WAAW,mCAAmC;IAClD,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,MAAM,WAAW,GAAG,CACxB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,EAC/B,OAAO,CAAC,EAAE,SAAS,EAAE,KAClB,IAAI,CAAA;AAET,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,YAAY,KAAK;IACrF,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB,CAAA"}