@agentuity/core 1.0.41 → 1.0.42

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 (254) hide show
  1. package/dist/services/api-reference.d.ts +68 -0
  2. package/dist/services/api-reference.d.ts.map +1 -0
  3. package/dist/services/api-reference.js +91 -0
  4. package/dist/services/api-reference.js.map +1 -0
  5. package/dist/services/apikey/api-reference.d.ts +4 -0
  6. package/dist/services/apikey/api-reference.d.ts.map +1 -0
  7. package/dist/services/apikey/api-reference.js +96 -0
  8. package/dist/services/apikey/api-reference.js.map +1 -0
  9. package/dist/services/db/api-reference.d.ts +4 -0
  10. package/dist/services/db/api-reference.d.ts.map +1 -0
  11. package/dist/services/db/api-reference.js +149 -0
  12. package/dist/services/db/api-reference.js.map +1 -0
  13. package/dist/services/db/types.d.ts +7 -0
  14. package/dist/services/db/types.d.ts.map +1 -0
  15. package/dist/services/db/types.js +9 -0
  16. package/dist/services/db/types.js.map +1 -0
  17. package/dist/services/email/api-reference.d.ts +4 -0
  18. package/dist/services/email/api-reference.d.ts.map +1 -0
  19. package/dist/services/email/api-reference.js +342 -0
  20. package/dist/services/email/api-reference.js.map +1 -0
  21. package/dist/services/email/service.d.ts.map +1 -1
  22. package/dist/services/email/service.js +1 -2
  23. package/dist/services/email/service.js.map +1 -1
  24. package/dist/services/email/types.d.ts +13 -0
  25. package/dist/services/email/types.d.ts.map +1 -0
  26. package/dist/services/email/types.js +11 -0
  27. package/dist/services/email/types.js.map +1 -0
  28. package/dist/services/eval/api-reference.d.ts +4 -0
  29. package/dist/services/eval/api-reference.d.ts.map +1 -0
  30. package/dist/services/eval/api-reference.js +121 -0
  31. package/dist/services/eval/api-reference.js.map +1 -0
  32. package/dist/services/index.d.ts +2 -0
  33. package/dist/services/index.d.ts.map +1 -1
  34. package/dist/services/index.js +2 -0
  35. package/dist/services/index.js.map +1 -1
  36. package/dist/services/keyvalue/api-reference.d.ts +4 -0
  37. package/dist/services/keyvalue/api-reference.d.ts.map +1 -0
  38. package/dist/services/keyvalue/api-reference.js +270 -0
  39. package/dist/services/keyvalue/api-reference.js.map +1 -0
  40. package/dist/services/keyvalue/types.d.ts +18 -0
  41. package/dist/services/keyvalue/types.d.ts.map +1 -0
  42. package/dist/services/keyvalue/types.js +19 -0
  43. package/dist/services/keyvalue/types.js.map +1 -0
  44. package/dist/services/machine/api-reference.d.ts +4 -0
  45. package/dist/services/machine/api-reference.d.ts.map +1 -0
  46. package/dist/services/machine/api-reference.js +152 -0
  47. package/dist/services/machine/api-reference.js.map +1 -0
  48. package/dist/services/machine/types.d.ts +18 -0
  49. package/dist/services/machine/types.d.ts.map +1 -0
  50. package/dist/services/machine/types.js +15 -0
  51. package/dist/services/machine/types.js.map +1 -0
  52. package/dist/services/monitoring/index.d.ts +3 -0
  53. package/dist/services/monitoring/index.d.ts.map +1 -0
  54. package/dist/services/monitoring/index.js +3 -0
  55. package/dist/services/monitoring/index.js.map +1 -0
  56. package/dist/services/monitoring/service.d.ts +55 -0
  57. package/dist/services/monitoring/service.d.ts.map +1 -0
  58. package/dist/services/monitoring/service.js +503 -0
  59. package/dist/services/monitoring/service.js.map +1 -0
  60. package/dist/services/monitoring/types.d.ts +173 -0
  61. package/dist/services/monitoring/types.d.ts.map +1 -0
  62. package/dist/services/monitoring/types.js +2 -0
  63. package/dist/services/monitoring/types.js.map +1 -0
  64. package/dist/services/oauth/activity.d.ts +5 -0
  65. package/dist/services/oauth/activity.d.ts.map +1 -0
  66. package/dist/services/oauth/activity.js +17 -0
  67. package/dist/services/oauth/activity.js.map +1 -0
  68. package/dist/services/oauth/api-reference.d.ts +4 -0
  69. package/dist/services/oauth/api-reference.d.ts.map +1 -0
  70. package/dist/services/oauth/api-reference.js +344 -0
  71. package/dist/services/oauth/api-reference.js.map +1 -0
  72. package/dist/services/oauth/clients.d.ts +18 -0
  73. package/dist/services/oauth/clients.d.ts.map +1 -0
  74. package/dist/services/oauth/clients.js +66 -0
  75. package/dist/services/oauth/clients.js.map +1 -0
  76. package/dist/services/oauth/consent.d.ts +7 -0
  77. package/dist/services/oauth/consent.d.ts.map +1 -0
  78. package/dist/services/oauth/consent.js +17 -0
  79. package/dist/services/oauth/consent.js.map +1 -0
  80. package/dist/services/oauth/index.d.ts +9 -0
  81. package/dist/services/oauth/index.d.ts.map +1 -0
  82. package/dist/services/oauth/index.js +9 -0
  83. package/dist/services/oauth/index.js.map +1 -0
  84. package/dist/services/oauth/keys.d.ts +5 -0
  85. package/dist/services/oauth/keys.d.ts.map +1 -0
  86. package/dist/services/oauth/keys.js +10 -0
  87. package/dist/services/oauth/keys.js.map +1 -0
  88. package/dist/services/oauth/members.d.ts +4 -0
  89. package/dist/services/oauth/members.d.ts.map +1 -0
  90. package/dist/services/oauth/members.js +10 -0
  91. package/dist/services/oauth/members.js.map +1 -0
  92. package/dist/services/oauth/scopes.d.ts +4 -0
  93. package/dist/services/oauth/scopes.d.ts.map +1 -0
  94. package/dist/services/oauth/scopes.js +10 -0
  95. package/dist/services/oauth/scopes.js.map +1 -0
  96. package/dist/services/oauth/types.d.ts +587 -0
  97. package/dist/services/oauth/types.d.ts.map +1 -0
  98. package/dist/services/oauth/types.js +160 -0
  99. package/dist/services/oauth/types.js.map +1 -0
  100. package/dist/services/oauth/util.d.ts +23 -0
  101. package/dist/services/oauth/util.d.ts.map +1 -0
  102. package/dist/services/oauth/util.js +3 -0
  103. package/dist/services/oauth/util.js.map +1 -0
  104. package/dist/services/org/api-reference.d.ts +4 -0
  105. package/dist/services/org/api-reference.d.ts.map +1 -0
  106. package/dist/services/org/api-reference.js +145 -0
  107. package/dist/services/org/api-reference.js.map +1 -0
  108. package/dist/services/org/types.d.ts +8 -0
  109. package/dist/services/org/types.d.ts.map +1 -0
  110. package/dist/services/org/types.js +7 -0
  111. package/dist/services/org/types.js.map +1 -0
  112. package/dist/services/project/api-reference.d.ts +4 -0
  113. package/dist/services/project/api-reference.d.ts.map +1 -0
  114. package/dist/services/project/api-reference.js +618 -0
  115. package/dist/services/project/api-reference.js.map +1 -0
  116. package/dist/services/project/types.d.ts +29 -0
  117. package/dist/services/project/types.d.ts.map +1 -0
  118. package/dist/services/project/types.js +40 -0
  119. package/dist/services/project/types.js.map +1 -0
  120. package/dist/services/queue/api-reference.d.ts +4 -0
  121. package/dist/services/queue/api-reference.d.ts.map +1 -0
  122. package/dist/services/queue/api-reference.js +713 -0
  123. package/dist/services/queue/api-reference.js.map +1 -0
  124. package/dist/services/queue/types.d.ts +281 -0
  125. package/dist/services/queue/types.d.ts.map +1 -1
  126. package/dist/services/queue/types.js +81 -0
  127. package/dist/services/queue/types.js.map +1 -1
  128. package/dist/services/region/api-reference.d.ts +4 -0
  129. package/dist/services/region/api-reference.d.ts.map +1 -0
  130. package/dist/services/region/api-reference.js +98 -0
  131. package/dist/services/region/api-reference.js.map +1 -0
  132. package/dist/services/region/types.d.ts +18 -0
  133. package/dist/services/region/types.d.ts.map +1 -0
  134. package/dist/services/region/types.js +18 -0
  135. package/dist/services/region/types.js.map +1 -0
  136. package/dist/services/sandbox/api-reference.d.ts +4 -0
  137. package/dist/services/sandbox/api-reference.d.ts.map +1 -0
  138. package/dist/services/sandbox/api-reference.js +1006 -0
  139. package/dist/services/sandbox/api-reference.js.map +1 -0
  140. package/dist/services/sandbox/run.d.ts +1 -1
  141. package/dist/services/sandbox/types.d.ts +64 -1
  142. package/dist/services/sandbox/types.d.ts.map +1 -1
  143. package/dist/services/sandbox/types.js +87 -0
  144. package/dist/services/sandbox/types.js.map +1 -1
  145. package/dist/services/schedule/api-reference.d.ts +4 -0
  146. package/dist/services/schedule/api-reference.d.ts.map +1 -0
  147. package/dist/services/schedule/api-reference.js +216 -0
  148. package/dist/services/schedule/api-reference.js.map +1 -0
  149. package/dist/services/schedule/types.d.ts +36 -0
  150. package/dist/services/schedule/types.d.ts.map +1 -0
  151. package/dist/services/schedule/types.js +20 -0
  152. package/dist/services/schedule/types.js.map +1 -0
  153. package/dist/services/session/api-reference.d.ts +4 -0
  154. package/dist/services/session/api-reference.d.ts.map +1 -0
  155. package/dist/services/session/api-reference.js +154 -0
  156. package/dist/services/session/api-reference.js.map +1 -0
  157. package/dist/services/storage/api-reference.d.ts +4 -0
  158. package/dist/services/storage/api-reference.d.ts.map +1 -0
  159. package/dist/services/storage/api-reference.js +196 -0
  160. package/dist/services/storage/api-reference.js.map +1 -0
  161. package/dist/services/storage/types.d.ts.map +1 -1
  162. package/dist/services/storage/types.js +9 -3
  163. package/dist/services/storage/types.js.map +1 -1
  164. package/dist/services/stream/api-reference.d.ts +4 -0
  165. package/dist/services/stream/api-reference.d.ts.map +1 -0
  166. package/dist/services/stream/api-reference.js +153 -0
  167. package/dist/services/stream/api-reference.js.map +1 -0
  168. package/dist/services/stream/types.d.ts +49 -0
  169. package/dist/services/stream/types.d.ts.map +1 -0
  170. package/dist/services/stream/types.js +49 -0
  171. package/dist/services/stream/types.js.map +1 -0
  172. package/dist/services/task/api-reference.d.ts +4 -0
  173. package/dist/services/task/api-reference.d.ts.map +1 -0
  174. package/dist/services/task/api-reference.js +802 -0
  175. package/dist/services/task/api-reference.js.map +1 -0
  176. package/dist/services/task/service.d.ts.map +1 -1
  177. package/dist/services/task/service.js +35 -39
  178. package/dist/services/task/service.js.map +1 -1
  179. package/dist/services/task/types.d.ts +48 -0
  180. package/dist/services/task/types.d.ts.map +1 -0
  181. package/dist/services/task/types.js +55 -0
  182. package/dist/services/task/types.js.map +1 -0
  183. package/dist/services/thread/api-reference.d.ts +4 -0
  184. package/dist/services/thread/api-reference.d.ts.map +1 -0
  185. package/dist/services/thread/api-reference.js +89 -0
  186. package/dist/services/thread/api-reference.js.map +1 -0
  187. package/dist/services/user/api-reference.d.ts +4 -0
  188. package/dist/services/user/api-reference.d.ts.map +1 -0
  189. package/dist/services/user/api-reference.js +27 -0
  190. package/dist/services/user/api-reference.js.map +1 -0
  191. package/dist/services/vector/api-reference.d.ts +4 -0
  192. package/dist/services/vector/api-reference.d.ts.map +1 -0
  193. package/dist/services/vector/api-reference.js +213 -0
  194. package/dist/services/vector/api-reference.js.map +1 -0
  195. package/dist/services/vector/types.d.ts +63 -0
  196. package/dist/services/vector/types.d.ts.map +1 -0
  197. package/dist/services/vector/types.js +90 -0
  198. package/dist/services/vector/types.js.map +1 -0
  199. package/dist/services/webhook/api-reference.d.ts +4 -0
  200. package/dist/services/webhook/api-reference.d.ts.map +1 -0
  201. package/dist/services/webhook/api-reference.js +388 -0
  202. package/dist/services/webhook/api-reference.js.map +1 -0
  203. package/package.json +2 -2
  204. package/src/services/api-reference.ts +198 -0
  205. package/src/services/apikey/api-reference.ts +99 -0
  206. package/src/services/db/api-reference.ts +152 -0
  207. package/src/services/db/types.ts +12 -0
  208. package/src/services/email/api-reference.ts +349 -0
  209. package/src/services/email/service.ts +1 -6
  210. package/src/services/email/types.ts +15 -0
  211. package/src/services/eval/api-reference.ts +124 -0
  212. package/src/services/index.ts +2 -0
  213. package/src/services/keyvalue/api-reference.ts +280 -0
  214. package/src/services/keyvalue/types.ts +25 -0
  215. package/src/services/machine/api-reference.ts +158 -0
  216. package/src/services/machine/types.ts +21 -0
  217. package/src/services/monitoring/index.ts +2 -0
  218. package/src/services/monitoring/service.ts +639 -0
  219. package/src/services/monitoring/types.ts +209 -0
  220. package/src/services/oauth/activity.ts +41 -0
  221. package/src/services/oauth/api-reference.ts +380 -0
  222. package/src/services/oauth/clients.ts +161 -0
  223. package/src/services/oauth/consent.ts +33 -0
  224. package/src/services/oauth/index.ts +8 -0
  225. package/src/services/oauth/keys.ts +13 -0
  226. package/src/services/oauth/members.ts +13 -0
  227. package/src/services/oauth/scopes.ts +13 -0
  228. package/src/services/oauth/types.ts +240 -0
  229. package/src/services/oauth/util.ts +3 -0
  230. package/src/services/org/api-reference.ts +148 -0
  231. package/src/services/org/types.ts +9 -0
  232. package/src/services/project/api-reference.ts +636 -0
  233. package/src/services/project/types.ts +47 -0
  234. package/src/services/queue/api-reference.ts +734 -0
  235. package/src/services/queue/types.ts +112 -0
  236. package/src/services/region/api-reference.ts +105 -0
  237. package/src/services/region/types.ts +27 -0
  238. package/src/services/sandbox/api-reference.ts +1042 -0
  239. package/src/services/sandbox/types.ts +100 -0
  240. package/src/services/schedule/api-reference.ts +228 -0
  241. package/src/services/schedule/types.ts +26 -0
  242. package/src/services/session/api-reference.ts +160 -0
  243. package/src/services/storage/api-reference.ts +207 -0
  244. package/src/services/storage/types.ts +9 -3
  245. package/src/services/stream/api-reference.ts +163 -0
  246. package/src/services/stream/types.ts +64 -0
  247. package/src/services/task/api-reference.ts +830 -0
  248. package/src/services/task/service.ts +35 -93
  249. package/src/services/task/types.ts +73 -0
  250. package/src/services/thread/api-reference.ts +91 -0
  251. package/src/services/user/api-reference.ts +31 -0
  252. package/src/services/vector/api-reference.ts +231 -0
  253. package/src/services/vector/types.ts +112 -0
  254. package/src/services/webhook/api-reference.ts +403 -0
@@ -0,0 +1,503 @@
1
+ import { z } from 'zod';
2
+ import { StructuredError } from "../../error.js";
3
+ import { APIResponseSchema } from "../api.js";
4
+ // ---------------------------------------------------------------------------
5
+ // Zod schemas mirroring every interface in types.ts
6
+ // ---------------------------------------------------------------------------
7
+ const CpuMetricsSchema = z.object({
8
+ usagePercent: z.number().describe('Aggregate CPU usage as a 0-1 fraction'),
9
+ coreUsagePercent: z.array(z.number()).describe('Per-core CPU usage as 0-1 fractions'),
10
+ loadAvg1: z.number().describe('1-minute load average'),
11
+ loadAvg5: z.number().describe('5-minute load average'),
12
+ loadAvg15: z.number().describe('15-minute load average'),
13
+ coreCount: z.number().describe('Number of CPU cores'),
14
+ });
15
+ const MemoryMetricsSchema = z.object({
16
+ totalBytes: z.number().describe('Total physical memory in bytes'),
17
+ usedBytes: z.number().describe('Used memory in bytes'),
18
+ availableBytes: z.number().describe('Available memory in bytes'),
19
+ cachedBytes: z.number().describe('Cached memory in bytes'),
20
+ buffersBytes: z.number().describe('Buffer memory in bytes'),
21
+ swapTotalBytes: z.number().describe('Total swap space in bytes'),
22
+ swapUsedBytes: z.number().describe('Used swap space in bytes'),
23
+ usagePercent: z.number().describe('Memory usage as a percentage'),
24
+ });
25
+ const DiskMetricsSchema = z.object({
26
+ mountPoint: z.string().describe('Filesystem mount point'),
27
+ device: z.string().describe('Block device name'),
28
+ fsType: z.string().describe('Filesystem type (ext4, xfs, etc.)'),
29
+ totalBytes: z.number().describe('Total disk capacity in bytes'),
30
+ usedBytes: z.number().describe('Used disk space in bytes'),
31
+ availableBytes: z.number().describe('Available disk space in bytes'),
32
+ usagePercent: z.number().describe('Disk usage as a percentage'),
33
+ inodesTotal: z.number().describe('Total number of inodes'),
34
+ inodesUsed: z.number().describe('Number of used inodes'),
35
+ readBytesDelta: z.number().describe('Bytes read since last report'),
36
+ writeBytesDelta: z.number().describe('Bytes written since last report'),
37
+ readOpsDelta: z.number().describe('Read operations since last report'),
38
+ writeOpsDelta: z.number().describe('Write operations since last report'),
39
+ });
40
+ const NetworkInterfaceMetricsSchema = z.object({
41
+ name: z.string().describe('Network interface name'),
42
+ rxBytesDelta: z.number().describe('Bytes received since last report'),
43
+ txBytesDelta: z.number().describe('Bytes transmitted since last report'),
44
+ rxPacketsDelta: z.number().describe('Packets received since last report'),
45
+ txPacketsDelta: z.number().describe('Packets transmitted since last report'),
46
+ rxErrorsDelta: z.number().describe('Receive errors since last report'),
47
+ txErrorsDelta: z.number().describe('Transmit errors since last report'),
48
+ rxDropsDelta: z.number().describe('Receive drops since last report'),
49
+ txDropsDelta: z.number().describe('Transmit drops since last report'),
50
+ linkState: z.string().describe('Network link state (up, down, etc.)'),
51
+ speedMbps: z.number().describe('Link speed in Mbps'),
52
+ });
53
+ const SystemInfoSchema = z.object({
54
+ hostname: z.string().describe('Machine hostname'),
55
+ kernelVersion: z.string().describe('Linux kernel version'),
56
+ os: z.string().describe('Operating system name'),
57
+ arch: z.string().describe('CPU architecture (amd64, arm64, etc.)'),
58
+ uptimeSeconds: z.number().describe('System uptime in seconds'),
59
+ cpuCount: z.number().describe('Number of CPU cores'),
60
+ totalMemoryBytes: z.number().describe('Total physical memory in bytes'),
61
+ });
62
+ const HostMetricsSchema = z.object({
63
+ cpu: CpuMetricsSchema.describe('CPU metrics'),
64
+ memory: MemoryMetricsSchema.describe('Memory metrics'),
65
+ disks: z.array(DiskMetricsSchema).describe('Per-disk metrics'),
66
+ networkInterfaces: z
67
+ .array(NetworkInterfaceMetricsSchema)
68
+ .describe('Per-interface network metrics'),
69
+ system: SystemInfoSchema.describe('Static system information'),
70
+ });
71
+ const CapacitySummarySchema = z.object({
72
+ cpuPressure: z.number().describe('CPU pressure score (0-1, higher = more pressure)'),
73
+ memoryPressure: z.number().describe('Memory pressure score (0-1, higher = more pressure)'),
74
+ diskPressure: z.number().describe('Disk pressure score (0-1, higher = more pressure)'),
75
+ networkPressure: z.number().describe('Network pressure score (0-1, higher = more pressure)'),
76
+ compositeScore: z
77
+ .number()
78
+ .describe('Weighted composite pressure score (0-1, higher = more pressure)'),
79
+ totalContainers: z.number().describe('Total number of containers on the node'),
80
+ runningContainers: z.number().describe('Number of currently running containers'),
81
+ });
82
+ const NodeEventLevelSchema = z
83
+ .enum(['UNSPECIFIED', 'INFO', 'WARN', 'ERROR', 'CRITICAL'])
84
+ .describe('Severity level of a node event');
85
+ const NodeEventTypeSchema = z
86
+ .enum([
87
+ 'UNSPECIFIED',
88
+ 'CONTAINER_START',
89
+ 'CONTAINER_STOP',
90
+ 'CONTAINER_OOM',
91
+ 'CONTAINER_HEALTH_CHANGE',
92
+ 'PRESSURE_THRESHOLD',
93
+ 'DISK_NEARLY_FULL',
94
+ 'COLLECTOR_ERROR',
95
+ 'PRESSURE_ALERT',
96
+ 'HEALTH_ALERT',
97
+ ])
98
+ .describe('Type of node event');
99
+ const NodeEventSchema = z.object({
100
+ timestampUs: z.number().describe('Event timestamp in microseconds since epoch'),
101
+ level: NodeEventLevelSchema.describe('Event severity level'),
102
+ type: NodeEventTypeSchema.describe('Event type'),
103
+ message: z.string().describe('Human-readable event description'),
104
+ metadata: z.record(z.string(), z.string()).describe('Key-value metadata attached to the event'),
105
+ });
106
+ const ContainerMetricsSchema = z.object({
107
+ deploymentId: z
108
+ .string()
109
+ .describe('Deployment or sandbox ID identifying what the container runs'),
110
+ containerId: z.string().describe('Docker container ID'),
111
+ image: z.string().describe('Container image name'),
112
+ state: z.string().describe('Container state (running, stopped, etc.)'),
113
+ cpuUsagePercent: z.number().describe('Container CPU usage as a percentage'),
114
+ cpuThrottledPeriods: z.number().describe('Number of CPU throttled periods'),
115
+ cpuTotalPeriods: z.number().describe('Total number of CPU scheduling periods'),
116
+ cpuLimitMillicores: z.number().describe('CPU limit in millicores'),
117
+ memoryUsageBytes: z.number().describe('Current memory usage in bytes'),
118
+ memoryLimitBytes: z.number().describe('Memory limit in bytes'),
119
+ memoryRssBytes: z.number().describe('Resident set size in bytes'),
120
+ memoryCacheBytes: z.number().describe('Page cache memory in bytes'),
121
+ memorySwapBytes: z.number().describe('Swap usage in bytes'),
122
+ oomKillCount: z.number().describe('Number of OOM kill events'),
123
+ netRxBytesDelta: z.number().describe('Network bytes received since last report'),
124
+ netTxBytesDelta: z.number().describe('Network bytes transmitted since last report'),
125
+ netRxPacketsDelta: z.number().describe('Network packets received since last report'),
126
+ netTxPacketsDelta: z.number().describe('Network packets transmitted since last report'),
127
+ blkioReadBytesDelta: z.number().describe('Block I/O bytes read since last report'),
128
+ blkioWriteBytesDelta: z.number().describe('Block I/O bytes written since last report'),
129
+ pidCount: z.number().describe('Number of running processes'),
130
+ healthy: z.boolean().describe('Whether the container health check is passing'),
131
+ inflightRequests: z.number().describe('Number of in-flight HTTP requests'),
132
+ startedAtUs: z.number().describe('Container start time in microseconds since epoch'),
133
+ lastUpdatedUs: z.number().describe('Last metrics update time in microseconds since epoch'),
134
+ ipv4Address: z.string().describe('Container IPv4 address'),
135
+ ipv6Address: z.string().describe('Container IPv6 address'),
136
+ });
137
+ const NodeMonitorReportSchema = z.object({
138
+ machineId: z.string().describe('Unique machine identifier'),
139
+ reportedAtUs: z.number().describe('Report timestamp in microseconds since epoch'),
140
+ seq: z.number().describe('Monotonically increasing sequence number'),
141
+ host: HostMetricsSchema.describe('Host-level metrics'),
142
+ containers: z.array(ContainerMetricsSchema).describe('Per-container metrics'),
143
+ capacity: CapacitySummarySchema.describe('Computed capacity and pressure summary'),
144
+ events: z.array(NodeEventSchema).describe('Node events since last report'),
145
+ reportIntervalSeconds: z.number().describe('Interval between reports in seconds'),
146
+ });
147
+ const StreamHealthSchema = z
148
+ .enum(['CONNECTED', 'STALE', 'DISCONNECTED'])
149
+ .describe('Machine connection health state');
150
+ const MachineMonitorStateSchema = z.object({
151
+ machineId: z.string().describe('Unique machine identifier'),
152
+ orgId: z.string().describe('Organization that owns the machine'),
153
+ report: NodeMonitorReportSchema.describe('Latest monitor report from the node'),
154
+ compositeScore: z.number().describe('Composite pressure score (0-1, higher = more pressure)'),
155
+ health: StreamHealthSchema.describe('Machine connection health state'),
156
+ reportedAt: z.string().describe('ISO 8601 timestamp of the latest report'),
157
+ updatedAt: z.string().describe('ISO 8601 timestamp of the last state update'),
158
+ gravity: z.string().describe('Gravity server the machine is connected to'),
159
+ });
160
+ // ---------------------------------------------------------------------------
161
+ // Response schemas
162
+ // ---------------------------------------------------------------------------
163
+ const MonitorNodesListResponseSchema = APIResponseSchema(z.array(MachineMonitorStateSchema));
164
+ const MonitorNodeGetResponseSchema = APIResponseSchema(MachineMonitorStateSchema);
165
+ const MonitorNodeContainersResponseSchema = APIResponseSchema(z.array(ContainerMetricsSchema));
166
+ export const MonitorResponseError = StructuredError('MonitorResponseError')();
167
+ export const MonitorScopeError = StructuredError('MonitorScopeError')();
168
+ export const MonitorWebSocketError = StructuredError('MonitorWebSocketError')();
169
+ export async function listMonitorNodes(client) {
170
+ const resp = await client.get(`/monitor/nodes`, MonitorNodesListResponseSchema);
171
+ if (resp.success) {
172
+ return resp.data;
173
+ }
174
+ throw new MonitorResponseError({ message: resp.message || 'Failed to list monitor nodes' });
175
+ }
176
+ export async function getMonitorNode(client, machineId) {
177
+ const resp = await client.get(`/monitor/nodes/${encodeURIComponent(machineId)}`, MonitorNodeGetResponseSchema);
178
+ if (resp.success) {
179
+ return resp.data;
180
+ }
181
+ throw new MonitorResponseError({
182
+ message: resp.message || 'Failed to get monitor node',
183
+ path: `/monitor/nodes/${machineId}`,
184
+ });
185
+ }
186
+ export async function listDistressedNodes(client) {
187
+ const resp = await client.get(`/monitor/nodes/distressed`, MonitorNodesListResponseSchema);
188
+ if (resp.success) {
189
+ return resp.data;
190
+ }
191
+ throw new MonitorResponseError({
192
+ message: resp.message || 'Failed to list distressed monitor nodes',
193
+ });
194
+ }
195
+ export async function listMonitorNodeContainers(client, machineId) {
196
+ const resp = await client.get(`/monitor/nodes/${encodeURIComponent(machineId)}/containers`, MonitorNodeContainersResponseSchema);
197
+ if (resp.success) {
198
+ return resp.data;
199
+ }
200
+ throw new MonitorResponseError({
201
+ message: resp.message || 'Failed to list monitor containers',
202
+ path: `/monitor/nodes/${machineId}/containers`,
203
+ });
204
+ }
205
+ function toWsUrl(baseUrl) {
206
+ const wsUrl = baseUrl.replace(/^https:\/\//, 'wss://').replace(/^http:\/\//, 'ws://');
207
+ return `${wsUrl.replace(/\/$/, '')}/monitor/ws`;
208
+ }
209
+ function toScopeMessage(scope) {
210
+ if (scope.scope === 'machine') {
211
+ if (!scope.machineId) {
212
+ throw new MonitorScopeError({
213
+ message: 'machineId is required for machine scope',
214
+ scope: 'machine',
215
+ });
216
+ }
217
+ return {
218
+ type: 'subscribe',
219
+ scope: 'machine',
220
+ machine_id: scope.machineId,
221
+ };
222
+ }
223
+ if (scope.scope === 'deployment') {
224
+ if (!scope.deploymentId) {
225
+ throw new MonitorScopeError({
226
+ message: 'deploymentId is required for deployment scope',
227
+ scope: 'deployment',
228
+ });
229
+ }
230
+ return {
231
+ type: 'subscribe',
232
+ scope: 'deployment',
233
+ deployment_id: scope.deploymentId,
234
+ };
235
+ }
236
+ return {
237
+ type: 'subscribe',
238
+ scope: 'org',
239
+ };
240
+ }
241
+ function toStreamHealth(value) {
242
+ if (value === 'CONNECTED' || value === 'STALE' || value === 'DISCONNECTED') {
243
+ return value;
244
+ }
245
+ return 'DISCONNECTED';
246
+ }
247
+ function parseMessage(raw) {
248
+ if (!raw || typeof raw !== 'object') {
249
+ return null;
250
+ }
251
+ const data = raw;
252
+ const type = data.type;
253
+ if (type === 'snapshot') {
254
+ if (!Array.isArray(data.machines)) {
255
+ return null;
256
+ }
257
+ return {
258
+ type: 'snapshot',
259
+ machines: data.machines,
260
+ };
261
+ }
262
+ if (type === 'update') {
263
+ const machineId = (typeof data.machineId === 'string' ? data.machineId : null) ??
264
+ (typeof data.machine_id === 'string' ? data.machine_id : null);
265
+ if (!machineId || !data.report || typeof data.report !== 'object') {
266
+ return null;
267
+ }
268
+ return {
269
+ type: 'update',
270
+ machineId,
271
+ health: toStreamHealth(data.health),
272
+ report: data.report,
273
+ };
274
+ }
275
+ if (type === 'state_change') {
276
+ const machineId = (typeof data.machineId === 'string' ? data.machineId : null) ??
277
+ (typeof data.machine_id === 'string' ? data.machine_id : null);
278
+ if (!machineId) {
279
+ return null;
280
+ }
281
+ return {
282
+ type: 'state_change',
283
+ machineId,
284
+ health: toStreamHealth(data.health),
285
+ previousHealth: toStreamHealth(data.previousHealth ?? data.previous_health),
286
+ };
287
+ }
288
+ return null;
289
+ }
290
+ export class MonitorWebSocketClient {
291
+ #options;
292
+ #state = 'closed';
293
+ #ws = null;
294
+ #reconnectAttempts = 0;
295
+ #reconnectTimer = null;
296
+ #intentionallyClosed = false;
297
+ constructor(options) {
298
+ this.#options = options;
299
+ }
300
+ get state() {
301
+ return this.#state;
302
+ }
303
+ connect() {
304
+ if (this.#state !== 'closed') {
305
+ return;
306
+ }
307
+ this.#intentionallyClosed = false;
308
+ if (this.#reconnectTimer !== null) {
309
+ clearTimeout(this.#reconnectTimer);
310
+ this.#reconnectTimer = null;
311
+ }
312
+ this.#connectInternal();
313
+ }
314
+ close() {
315
+ this.#intentionallyClosed = true;
316
+ if (this.#reconnectTimer !== null) {
317
+ clearTimeout(this.#reconnectTimer);
318
+ this.#reconnectTimer = null;
319
+ }
320
+ if (this.#ws) {
321
+ this.#ws.close(1000, 'Client closed');
322
+ this.#ws = null;
323
+ }
324
+ this.#state = 'closed';
325
+ }
326
+ updateScope(scope) {
327
+ this.#options.scope = scope;
328
+ if (this.#state === 'connected' && this.#ws?.readyState === WebSocket.OPEN) {
329
+ this.#ws.send(JSON.stringify(toScopeMessage(scope)));
330
+ }
331
+ }
332
+ #connectInternal() {
333
+ const { baseUrl, token, orgId, scope = { scope: 'org' }, autoReconnect = true, maxReconnectAttempts = Number.POSITIVE_INFINITY, reconnectDelayMs = 1000, maxReconnectDelayMs = 30000, onClose, onError, onMessage, onOpen, onSnapshot, onStateChange, onUpdate, } = this.#options;
334
+ if (this.#intentionallyClosed) {
335
+ return;
336
+ }
337
+ this.#state = this.#reconnectAttempts > 0 ? 'reconnecting' : 'connecting';
338
+ try {
339
+ this.#ws = new WebSocket(toWsUrl(baseUrl));
340
+ }
341
+ catch (error) {
342
+ this.#state = 'closed';
343
+ onError?.(new MonitorWebSocketError({
344
+ message: `Failed to create monitor WebSocket: ${String(error)}`,
345
+ code: 'connection_failed',
346
+ }));
347
+ this.#scheduleReconnect(autoReconnect, maxReconnectAttempts, reconnectDelayMs, maxReconnectDelayMs, onError);
348
+ return;
349
+ }
350
+ let authenticated = false;
351
+ this.#ws.onopen = () => {
352
+ this.#state = 'authenticating';
353
+ this.#ws?.send(JSON.stringify({ token, org_id: orgId }));
354
+ };
355
+ this.#ws.onmessage = (event) => {
356
+ const rawText = typeof event.data === 'string' ? event.data : String(event.data);
357
+ let parsed;
358
+ try {
359
+ parsed = JSON.parse(rawText);
360
+ }
361
+ catch {
362
+ return;
363
+ }
364
+ if (!authenticated) {
365
+ const data = parsed;
366
+ if (data.error) {
367
+ this.#state = 'closed';
368
+ onError?.(new MonitorWebSocketError({
369
+ message: `Monitor auth failed: ${String(data.error)}`,
370
+ code: 'auth_failed',
371
+ }));
372
+ this.#intentionallyClosed = true;
373
+ this.#ws?.close(4001, 'Auth failed');
374
+ return;
375
+ }
376
+ authenticated = true;
377
+ this.#state = 'subscribing';
378
+ this.#ws?.send(JSON.stringify(toScopeMessage(scope)));
379
+ this.#state = 'connected';
380
+ this.#reconnectAttempts = 0;
381
+ onOpen?.();
382
+ return;
383
+ }
384
+ const message = parseMessage(parsed);
385
+ if (!message) {
386
+ return;
387
+ }
388
+ onMessage?.(message);
389
+ if (message.type === 'snapshot') {
390
+ onSnapshot?.(message);
391
+ }
392
+ else if (message.type === 'update') {
393
+ onUpdate?.(message);
394
+ }
395
+ else {
396
+ onStateChange?.(message);
397
+ }
398
+ };
399
+ this.#ws.onerror = () => {
400
+ onError?.(new MonitorWebSocketError({
401
+ message: 'Monitor WebSocket connection error',
402
+ code: 'connection_error',
403
+ }));
404
+ };
405
+ this.#ws.onclose = (event) => {
406
+ this.#ws = null;
407
+ this.#state = 'closed';
408
+ onClose?.(event.code, event.reason);
409
+ if (event.code >= 4000 && event.code < 5000) {
410
+ this.#intentionallyClosed = true;
411
+ }
412
+ if (!this.#intentionallyClosed) {
413
+ this.#scheduleReconnect(autoReconnect, maxReconnectAttempts, reconnectDelayMs, maxReconnectDelayMs, onError);
414
+ }
415
+ };
416
+ }
417
+ #scheduleReconnect(autoReconnect, maxReconnectAttempts, reconnectDelayMs, maxReconnectDelayMs, onError) {
418
+ if (this.#intentionallyClosed || !autoReconnect) {
419
+ return;
420
+ }
421
+ if (this.#reconnectAttempts >= maxReconnectAttempts) {
422
+ onError?.(new MonitorWebSocketError({
423
+ message: `Exceeded max monitor reconnection attempts (${maxReconnectAttempts})`,
424
+ code: 'max_reconnects_exceeded',
425
+ }));
426
+ return;
427
+ }
428
+ const baseDelay = reconnectDelayMs * 2 ** this.#reconnectAttempts;
429
+ const jitter = 0.5 + Math.random() * 0.5;
430
+ const delay = Math.min(Math.floor(baseDelay * jitter), maxReconnectDelayMs);
431
+ this.#reconnectAttempts++;
432
+ this.#state = 'reconnecting';
433
+ this.#reconnectTimer = setTimeout(() => {
434
+ this.#reconnectTimer = null;
435
+ this.#connectInternal();
436
+ }, delay);
437
+ }
438
+ }
439
+ export async function* subscribeToMonitoring(options) {
440
+ const buffer = [];
441
+ let resolve = null;
442
+ let done = false;
443
+ let terminalError = null;
444
+ const wake = () => {
445
+ if (resolve) {
446
+ resolve();
447
+ resolve = null;
448
+ }
449
+ };
450
+ const client = new MonitorWebSocketClient({
451
+ ...options,
452
+ onMessage: (message) => {
453
+ buffer.push(message);
454
+ wake();
455
+ },
456
+ onError: (error) => {
457
+ terminalError = error;
458
+ // Only terminate for fatal errors (e.g., max reconnect attempts exceeded or auth failures).
459
+ // Transient errors are handled by the client's auto-reconnect logic.
460
+ if ('code' in error &&
461
+ (error.code === 'max_reconnects_exceeded' || error.code === 'auth_failed')) {
462
+ done = true;
463
+ }
464
+ wake();
465
+ },
466
+ onClose: (code) => {
467
+ if (code >= 4000 && code < 5000) {
468
+ done = true;
469
+ wake();
470
+ }
471
+ },
472
+ });
473
+ client.connect();
474
+ try {
475
+ while (!done) {
476
+ while (buffer.length > 0) {
477
+ const message = buffer.shift();
478
+ if (message) {
479
+ yield message;
480
+ }
481
+ }
482
+ if (done) {
483
+ break;
484
+ }
485
+ await new Promise((r) => {
486
+ resolve = r;
487
+ });
488
+ }
489
+ while (buffer.length > 0) {
490
+ const message = buffer.shift();
491
+ if (message) {
492
+ yield message;
493
+ }
494
+ }
495
+ if (terminalError) {
496
+ throw terminalError;
497
+ }
498
+ }
499
+ finally {
500
+ client.close();
501
+ }
502
+ }
503
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/services/monitoring/service.ts"],"names":[],"mappings":"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"}